韦东山Linux嵌入式课程社区
直播中

王东

8年用户 228经验值
私信 关注

C程序写0地址,函数并没有完全编译

问题
       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)

薛丽娜

2019-4-2 06:23:47
建议看一下老师提供代码的结果
举报

汤宇

2019-4-2 06:29:24
能不能帮忙分析一下是什么原因,这个函数就是老师提供的代码
举报

颜立歆

2019-4-2 06:39:08
老师的源码在我机器上编译后似乎也是同样的问题,附件是老师到源码以及在我机器上生成的反汇编代码,我怀疑是被系统优化后导致到问题。

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
举报

李德鹏

2019-4-2 06:56:56
怎么没有人帮忙解答呢?
举报

张毕鹄

2019-4-2 07:15:25
-O0
关掉编译优化看看
举报

更多回帖

发帖
×
20
完善资料,
赚取积分