完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ARM裸机第一期,第13课 代码重定位 ; 源码在目录 005_ARM裸机1期加强版源码文档图片源码 12_relocate 09
老师的汇编代码: /* 重定位text, rodata, data段整个程序 */ mov r0, #0 ldr r1, =_start /* 第1条指令运行时的地址 */ ldr r2, =__bss_start /* bss段的起始地址 */ sub r2, r2, r1 bl copy2sdram /* src, dest, len */ 老师的C语言代码: void copy2sdram(volatile unsigned int *src, volatile unsigned int *dest, unsigned int len) /* src, dest, len */ { unsigned int i = 0; while (i < len) { *dest++ = *src++; i += 4; } } 此时串口输出字符正常! =================================================================== 我把汇编代码中r0换成了r1,r1换成r2,r2换成了r3,如下: /* 重定位text, rodata, data段整个程序 */ mov r1, #0 ldr r2, =_start /* 第1条指令运行时的地址 */ ldr r3, =__bss_start /* bss段的起始地址 */ sub r3, r3, r2 bl copy2sdram /* src, dest, len */ C语言编码不动; 此时串口无字符输出? ================================================ 这是为什么啊? 看了下dis文件:所有的dis目录下,唯一的区别就是以下四条: 正确的源代码dis(30000000 <_start>:中): 30000060: e3a00000 mov r0, #0 ; 0x0 30000064: e59f102c ldr r1, [pc, #44] ; 30000098 <.text+0x98> 30000068: e59f202c ldr r2, [pc, #44] ; 3000009c <.text+0x9c> 3000006c: e0422001 sub r2, r2, r1 有问题的源代码dis 在(30000000 <_start>:中): 30000060: e3a01000 mov r1, #0 ; 0x0 30000064: e59f202c ldr r2, [pc, #44] ; 30000098 <.text+0x98> 30000068: e59f302c ldr r3, [pc, #44] ; 3000009c <.text+0x9c> 3000006c: e0433002 sub r3, r3, r2 为什么会有这样的问题,希望大神解答下,谢谢!!!! |
|
相关推荐
2个回答
|
|
|
|
|
|
哦,明白了,多谢老师指点1
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2181 浏览 6 评论
1983 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4541 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 17:54 , Processed in 0.760536 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号