完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在ok6410上,程序在lds文件里面指定了分段,如下:
mmu.lds: SECtiONS { first 0 : { head.o init.o } second 3072 : AT(2048) { leds.o } } --------------------------- head.S: .text .global _start _start: ldr r0, =0x70000013 mcr p15, 0, r0, c15, c2, 4 ldr sp, =8192 bl disable_watch_dog //////// bl copy_2048_to_3072 //////// ldr pc, =2048 //////// ldr pc, =3072 bl main halt_loop: b halt_loop --------------------------- init.c: void copy_2048_to_3072(void) { unsigned int *pdwSrc = (unsigned int *)2048; unsigned int *pdwDest = (unsigned int *)3072; while(pdwSrc < (unsigned int *)(2048+512)) { *pdwDest = *pdwSrc; pdwDest++; pdwSrc++; } } --------------------------- leds.c: int main() { volatile unsigned int k; volatile unsigned int i,j; GPMCON = 0x11111; GPMDAT = 0x00000000; while(1) { for(k=0;k<4;k++) { GPMDAT=~(1< for(j=0;j<3;j++) ; } } return 0; } --------------------------- main函数在leds.c里面,用来点亮led 程序烧到板子led不亮,是从nand flash-steppingstone启动的 然后我把head.S的bl main 改成 ldr pc, =2048试试,因为第二段代码存储在镜像2048的位置,但还是不亮 接着把head.S的bl main 改成 ldr pc, =3072试试,因为第二段代码在3072位置运行,但还是不亮 最后加上 bl copy_2048_to_3072,把2048处的代码拷贝到运行地址3072,bl main 改成 ldr pc, =3072,还是不亮 相同的程序,我不用分段,在makefile里面用 ARM-linux-ld -Ttext 0x50000000 -o mmu_elf $^ 连接后编译的程序,led可以点亮,说明main点亮函数是没有问题的。 现在能试的都试了,不知道为什么程序分段后,就不好用了,麻烦各位大神帮看看,十分感谢! |
|
相关推荐
29个回答
|
|
来晚了,最近比较忙,我用你的程序试了下,是可以的。可以猜测 ,没下载到nandFlash 的0地址。下载有问题!
|
|
|
|
年底肯定忙^_^ 谢谢百忙之中答复.
我的不分段程序和分段程序都用的同一种下载方法, 结果却是不分段的能亮, 分段的不亮, 我想如果没有下载到nand flash的0地址, 那这两个程序应该都没有下载到0地址吧, 那两个程序应该都不亮吧...... 难道说把不分段的下载到了0地址,分段的没有下载到0地址导致的吗......但是我用同一种方法下载的, 也说不过去啊, 奇怪... 我的下载方法是: 1.用sd卡启动,进入命令行 2.dnw 50008000 用u***传输程序到内存 3.nand erase 0 100000 擦除nand flash最开始的1MB空间 4.nand write.e 50008000 0 100000 写入 请问您是如何下载的呢, 谢谢哈 ^_^ |
|
|
|
我用sd卡启动, nand dump 0试了一下, 把能亮和不能亮, 两种情况下flash 导出来了, 和bin文件大致比了一下, 烧录下载应该没有问题, 两种情况都是下到flash的0地址了
|
|
|
|
额 这我就不清楚了 我的下载方法跟你一样。不过我的是飞凌的板子。我用mmc_ram256.bin 写进我的SD卡,
选5进入命令模式之后的命令一样,最后一个我用 nand write.uboot 50008000 0 100000 我用你的mmu-err.bin 下载进去后4个LED灯可以亮呀。之后我用mmu-ok.bin 下载进去也是4个灯都亮。 在这之前我用你的程序在linux下make后得到的bin文件下载进去也是4个灯全亮,我自己改了下GPMDAT = 0x0000001E的话只亮了一个灯。 |
|
|
|
我也是飞凌的, ok6410的板子, 256MB的ram ^^
|
|
|
|
对的, 0x0000001E 就是 二进制的11110 了, 是只有一个灯亮
|
|
|
|
刚才用 nand write.uboot 试了, 的确是可以的
看了uboot代码, write.uboot是用的 drivers/nand/nand_base.c里面的nand_write, 这个nand_write和kernel的drivers/mtd/nand/nand_base.c是一样的, 移植过来的吧 write.e是用的 driver/nand/nand_util.c里面的nand_write_opts, 这个不知道从哪里弄来的 往里看就不懂了, 不知道什么差异导致的问题, 可能kernel的安全些吧 ^^ 谢谢 linyuetian兄了 ^_^ |
|
|
|
相互学习!!
|
|
|
|
多谢多谢^^
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2166 浏览 6 评论
1975 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4530 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 01:06 , Processed in 0.908291 second(s), Total 94, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号