初级会员

- 积分
- 93
- 金钱
- 93
- 注册时间
- 2018-4-22
- 在线时间
- 26 小时
|
5金钱
最近在思考如下问题,产生一点疑问:
1.已知CM0只能运行在Thumb模式;
2.已知BLX或BX指令在跳转前会检查跳转地址。地址最低位为0,则跳转后要切换(或保持在)ARM模式;地址最低位为1,则跳转后要切换(或保持在)Thumb模式;
3.有如下代码(主要是Fun函数指定链接地址为0x00003230):
- __attribute((section(".ARM.__at_0x00003230")))
- void Fun( void )
- {
- xxxx(省略无关代码)
- }
- void main( void )
- {
- xxxx(省略无关代码)
复制代码 则 “ (*(void(*)())0x00003230)(); ”这句必然导致产生hardfault,因为跳转地址最低位为0,导致跳转后要切换到ARM模式。
在实际仿真中,全速运行确实会产生hardfault,可是单步调试则不产生hardfault,运行正常。
请问全速运行和单步调试为什么效果不同呢?
|
|