打印

发现iar For ARM M3 的一个Bug

[复制链接]
1522|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
seawwh|  楼主 | 2011-4-29 14:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
发现iar For ARM 的一个Bug

代码:
#pragma  pack(1)
static struct {
  u8   TT;
  u8   CC[8];
  u64  AA, BB;
}XX;
int main() {
  XX.AA=XX.BB;                 // 1#
  *((u64 *)XX.CC)=XX.AA;  // 2#    目的是想高效的传递8字节的数据。
}

现象:
  执行到2#语句时候,死机。
原因:
  在2#语句编译的时候,IAR采用了STRD指令,一次性将64位数据发送到目的地址,
  但是STRD指令要求目的地址必须能被8整除。去掉结构中的变量TT的定义,程序执行OK

测试环境:
优化: Low
IAR C/C++ Compiler for ARM
  5.50.5.21995 (5.50.5.21995)
  H:\Program Files\IAR Systems\Embedded Workbench 5.4   Evaluation\arm\bin\iccarm.exe

欢迎同行加以验证,也许高版本改掉了?
沙发
mohanwei| | 2011-4-29 15:07 | 只看该作者
再高效也高效不过union……:lol
即使是需要搬移数据,综合起来还是memcpy()高效省心

使用特权

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

本版积分规则

145

主题

368

帖子

0

粉丝