在IAR调试stm32中断偏移的奇怪现象

在STM32F207的Bootloader开发中,作者发现即使将APP函数中断偏移64KB,程序仍然能正常运行。尽管理论上应该从0x00010000开始执行,但实际上是从0x00000000开始,这引发了关于中断向量位置如何被确定的疑问。通过检查,作者怀疑可能是ST的数据手册有误,或者调试器在起作用。拔掉调试器后,程序无法启动,确认了问题与调试器有关,但具体原因尚不清楚。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在做STM32F207 bootloader时发生了一个诡异的事情,在IAR中将我的APP函数中断偏移设置为


即偏移了64KB,前64KB用于放置bootloader程序.编译连接最后生成map,查看也没出错


然后在IAR中下载调试(在此之前还没有下载bootloader):


竟然可以找到复位函数的入口,全速运行,程序正常执行.

按照ST官网的手册一般情况下,在复位后程序,程序从地址0x00000000读取堆栈地址,0x00000004取PC指针,0x00000000地址一般情况为0x08000000的映射,,

图中1就是2的别名,他们的数据能容是相同的.

我偏移了0x00010000后,理论上是应该从0x00010000(即0x08010000)取堆栈地址0x00010004(即0x08010004)取复位指针,这样执行似乎也是对的呀.

问题来了:在复位后STM32总是从0x00000000(不管被影射的那个地址RAM或者ROM或者外部FALSH) 处执行,但是此时0x00000000处并没有放置中断向量表,我的程序是如何知道向量表在0x00010000处(请不要带入上帝视角,单片机很单纯,你不告诉他就不知道)的呢?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值