在调试STM32代码时候发现了一个IAR的软件仿真错误:
环境: IAR4.42a ,IAR5.3 For STM32, 软件仿真执行,测试代码附后: 说明: 位于20000300的RAM单元,全部代码执行后应该为0x000000FF。 但是仿真的结果为0x000001FF; 改为硬件单步执行结果是正确的 20000300的RAM单元为0x000000FF。 这个Bug的最初发现是在按位访问I/O寄存器的时候。 到IAR 5.3上试验软件仿真执行结果仍然和4.42A雷同。 估计对其他具有这种位访问功能的ARM芯片,也会有错。 顺便说一句,STM32 的位访问功能可以有效的提高执行效率。
u32 *P0=(void *)0x20000300; u32 *P1=(void *)0x22006008;
int main(void) {
*P0=0x000001FF; *P1=0; // 将地址20000300H 单元的第8位置0
}
|