打印

什么是中断向量偏移,为什么要做中断向量偏移?

[复制链接]
668|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 聚沃科技 于 2024-7-18 09:37 编辑

MCU中有两段或以上程序的时候(第一个程序为用户BootLoader程序,其他的为APP程序,这个在前期视频《什么是ISP?什么是IAP》中有讲过),APP程序中都需要做中断向量偏移,那么什么是中断向量偏移,为什么要做中断向量偏移?
上一期常见问题《GD32 MCU是如何进入中断函数的》和大家讲过中断向量表的概念,当一个中断发生时,MCU会根据中断号去中断向量表中查找对应中断函数的入口。那如果APP程序中有中断发生,MCU还在0x08000000地址开始的地方去找中断函数入口显然是不行的,因为找到的中断函数入口对应的是BootLoader中断函数,跳转过去的话程序就运行异常了,这时候就需要做中断向量偏移:即让MCU0x08000000偏移一段长度的地址开始去查找向量表。
比如一段APP程序保存在0x08008000(不会设置的小伙伴可以参考前期视频《keilGD32 MCU IAPAPP的存储地址如何设置》),那么就需要MCU去这个地址开始的地方去查APP的向量表,也就是需要偏移0x8000
那么如何实现中断向量偏移呢?GD官方库中提供了一个函数:nvic_vector_table_set
参数1为中断向量表基地址,一般选择NVIC_VECTTAB_FLASH,也就是flash的基地址0x08000000
参数2为偏移量,比如这里我们用0x8000
所以只要在main函数的第一句调用下这个函数就可以实现中断向量偏移啦:
是不是特别简单呢?

教程由GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网,GD32MCU技术交流群:859440462

使用特权

评论回复
沙发
tpgf| | 2024-7-19 08:28 | 只看该作者
中断向量的偏移是头文件中已经定好了的吗

使用特权

评论回复
板凳
paotangsan| | 2024-7-19 09:44 | 只看该作者
中断向量的偏移量是固定不可更改的吗

使用特权

评论回复
地板
renzheshengui| | 2024-7-19 20:00 | 只看该作者
所有偏移量的起始地址是一样的 那么这个其实地址如果更改的话 会造成混乱吗

使用特权

评论回复
5
keaibukelian| | 2024-7-19 21:39 | 只看该作者
所有的向量的偏移的基地址会因为芯片的不同而不同吗

使用特权

评论回复
6
heimaojingzhang| | 2024-7-19 22:45 | 只看该作者
用户自己可以更改这个中断向量的偏移量吗

使用特权

评论回复
7
guanjiaer| | 2024-7-19 23:51 | 只看该作者
其实我理解的就是不同的中断针对基地址的差值

使用特权

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

本版积分规则

168

主题

188

帖子

5

粉丝