完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
8个回答
|
|
虽然sdram的地址是 0x30000000 - 0x40000000,可是板子的SDRAM只有64M,为啥栈顶 不是设置为 0x34000000+4k? 设置为0x40000000+4k不是没这么大内存吗?
|
|
|
|
片内ram的地址是设计CPU的人决定的,sdram 可以接32m 64m 128m,难道人家还得跟着你的sdram大小去变化么,把栈设置到 0x40000000 + 4k 是有风险的,正如你所说,0x34000000 - 0x40000000 这部分是空的对于我们的板子
|
|
|
|
既然0x34000000 - 0x40000000 这部分是空的,为啥还能设置为 0x40000000+4k?
|
|
|
|
0x34000000 - 0x40000000是说的寻址范围,根据外部接的SDRAM(64M),只有在0x30000000-0x34000000这个范围内才能正确读写到外部SDRAM的数据。另外0x40000000~0x40000000+4k的寻址范围是nor启动是内部RAM的地址,为了避免破坏数据所以把栈顶设置在了最高地址(栈地址是向下增长的),刚刚学有说的不对的指正。
|
|
|
|
那你还是没有解释 0x34000000 - 0x40000000 这部分是空的,为啥还能设置为 0x40000000+4k?
|
|
|
|
0x40000000~0x40000000+4k是内部RAM是确实存在的,和别的地址是不是空的无关,当然可以拿来用了。
|
|
|
|
1.先解释0x40000000如何来?
用NOR启动时,片内的存储控制器的BANK0-BANK7这8个BANK都对应了其他用途,所以设计者在BANK7结束的地址0x40000000的地方作为 NOR FLASH的启动地址,而NAND FLASH启动的地址则是0x00000000。请看下图: 2. 为什么幺+4096? 因为对于启动文件.S来说,4K的空间是足够存放,代码段、BSS......和堆栈段了,因为堆栈的SP是从高地址往低地址移动的,所以要将堆栈的起始地址放在堆栈段的高地址; 你也可以不用设置成4096,但要保证堆栈的长度不能和下面其他段重叠,若重叠,就会出BUG,保险值是4096,因为SRAM就是4K设计的。 |
|
|
|
看了你的解释才焕然大悟啊
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2160 浏览 6 评论
1968 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4524 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 09:51 , Processed in 0.859962 second(s), Total 111, Slave 92 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号