完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题
C语言编写的,判断从nor启动还是nand启动的函数在编译链接时,函数并没有完全编译, 反汇编结果如下(红色字体部分), 请老师帮忙看看是什么原因, 谢谢! c函数如下: int isBootFromNorFlash(void) { volatile int *p = (volatile int *)0; int val; val = *p; *p = 0x12345678; if (*p == 0x12345678) { *p = val; puts("boot from nor.nr"); return 0; } else { puts("boot from nand.nr"); return 1; } } 反汇编结果如下,红色字体部分,只编译了前面几行命令,后面都没有了。 33f802f8: e3510000 cmp r1, #0 33f802fc: 1afffff8 bne 33f802e4 33f80300: e12fff1e bx lr 33f80304 33f80304: e3a03000 mov r3, #0 33f80308: e5933000 ldr r3, [r3] 33f8030c: e7f000f0 udf #0 33f80310 33f80310: e59f2034 ldr r2, [pc, #52] ; 33f8034c 33f80314: e59fc034 ldr ip, [pc, #52] ; 33f80350 |
|
相关推荐
6个回答
|
|
建议看一下老师提供代码的结果
|
|
|
|
能不能帮忙分析一下是什么原因,这个函数就是老师提供的代码
|
|
|
|
老师的源码在我机器上编译后似乎也是同样的问题,附件是老师到源码以及在我机器上生成的反汇编代码,我怀疑是被系统优化后导致到问题。
33f800cc: 33f80080 mvnscc r0, #128 ; 0x80 33f800d0: 33f806dc mvnscc r0, #220, 12 ; 0xdc00000 33f800d4 33f800d4: e3a03000 mov r3, #0 33f800d8: e5933000 ldr r3, [r3] 33f800dc: e7f000f0 udf #0 33f800e0 33f800e0: e59f2034 ldr r2, [pc, #52] ; 33f8011c 33f800e4: e59fc034 ldr ip, [pc, #52] ; 33f80120 |
|
|
|
怎么没有人帮忙解答呢?
|
|
|
|
|
|
|
|
这是ARM gcc的一个特性,检测到空指针以***udf指令, 用来trap程序退出。
问题出在volatile int *p = (volatile int *)0; 建议将P作为参数传入 |
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2177 浏览 6 评论
1982 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4540 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 22:40 , Processed in 0.933047 second(s), Total 87, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号