完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在看了调试那节课仍有一些疑问请老师解答
这个地方,因为是局部变量,在栈里,临时生成,这一段的链接地址在30000774属于SDRAM,但此时SDRAM尚未初始化所以会出错。 问1:在汇编最开始设置栈的时候 ldr sp, =4096 ,这个局部变量在在栈里不也应该在这4k的位置吗?还是说因为链接地址在0x30000000,所以在sdram中开辟的栈去里储存的。 unsigned long *p = (unsigned long *)MEM_CTL_BASE; #define MEM_CTL_BASE 0x48000000 问2:代码这样改了之后就可以运行,但是这个p的地址是0x48000000不也在sdram中吗?这时候sdram仍然没有初始化呀,(所以这么操作用了位置无关码?) 问3:在C语写的代码中什么样的操作是位置相关的什么操作是位置无关的呢,全局变量是位置相关的(使用绝对地址),局部变量是位置无关的(使用相对地址)这样说对吗? 问4:我在新编译过的反汇编文件里,并没有找到0x22011110这个值的存放位置呢?其实上面13个寄存器值都没有找到,那是怎么读取到这些值的呢? 不好意思,问的有点多,麻烦解答一下,谢谢 |
|
相关推荐
2个回答
|
|
问1:在汇编最开始设置栈的时候 ldr sp, =4096 ,这个局部变量在在栈里不也应该在这4k的位置吗?还是说因为链接地址在0x30000000,所以在sdram中开辟的栈去里储存的
答:这一大堆数据从哪里来?我们看汇编知道,编译器是以链接地址来访问它们,把它们从SDRAM中读出来,从而初始化局部变量。 但是这时SDRAM未初始化,所以有错。 问2:代码这样改了之后就可以运行,但是这个p的地址是0x48000000不也在sdram中吗?这时候sdram仍然没有初始化呀 答:0x48000000是寄存器的地址,不是SDRAM的地址 问3:在C语写的代码中什么样的操作是位置相关的什么操作是位置无关的呢,全局变量是位置相关的(使用绝对地址),局部变量是位置无关的(使用相对地址)这样说对吗? 答:基本对,如果局部变量过于复杂,那么它也许会用到链接地址,这时就变成位置无关的了。这种情况,需要看反汇编码。 问4:我在新编译过的反汇编文件里,并没有找到0x22011110这个值的存放位置呢?其实上面13个寄存器值都没有找到,那是怎么读取到这些值的呢? 答:上传你的dis文件 |
|
|
|
下面有老师的回复你看一下
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2074 浏览 6 评论
1886 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4438 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 06:16 , Processed in 0.615975 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号