打印
[ARM入门]

IAR FREESCALE/NXP BME 问题

[复制链接]
512|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xch|  楼主 | 2017-10-21 19:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原代码是一句嵌入式汇编:
asm volatile("LDR r0,[%0]" ::"r"(BME_BIT_SET((u32)PORT->PUEL,0)));

反汇编变成:

        0x950: 0xbf00         NOP
  asm volatile("LDR r0,[%0]" ::"r"(BME_BIT_SET((u32)PORT->PUEL,0)));
        0x952: 0x481b         LDR.N     R0, [PC, #0x6c]         ; 0x40049004 (1074040836)
        0x954: 0x6800         LDR       R0, [R0]
        0x956: 0x21c0         MOVS      R1, #192                ; 0xc0
        0x958: 0x0509         LSLS      R1, R1, #20
        0x95a: 0x4301         ORRS      R1, R1, R0
        0x95c: 0x6808         LDR       R0, [R1]
        0x95e: 0x6800         LDR       R0, [R0]
  asm("nop");
        0x960: 0xbf00         NOP
  
其实只有第1,2句正确。 后面几句画蛇添足,跟踪最后LDR R0,[R0]就跑飞了。进入异常中断。

请教这IAR 编译器啥毛病?

PORT->PUEL 是CPU某寄存器,目的是利用BME 进行位设置操作。将其0位置一

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

xch

78

主题

5661

帖子

31

粉丝