发现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
欢迎同行加以验证,也许高版本改掉了? |