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

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

浅析RF天线中的两个特殊的传输线段
赋能工业制造转型升级,自连工业物联网解决方案
STC89C52+DS18B20实现环境温度检测(数码管显示温度)
小鹏汽车携手英伟达深耕自动驾驶领域
洲明体育首款万级亮度LED显示屏满足户外体育场在强光下显示需求
什么是中断向量偏移,为什么要做中断向量偏移?
半加成法SAP于载板之量产
KC免费派送情人节大礼
临床移动终端
拆解对比:Apple苹果 Lightning与USB-C to 3.5mm转换器
国外公司正开发一种专利技术,可降低电动汽车的生产成本以及提高储能
企业如何应对“互联网+”时代的到来?
智能超声波振动筛电源发生器设计
华为mate10什么时候上市?华为mate10最新消息:黑科技缠身+双曲面屏,华为mate10能否战胜三星note8?
气体检测仪如何校准,操作过程的详细介绍
Shimmer专攻穿戴式传感器 打造开源技术平台
华为授予Qorvo“最佳协同合作伙伴奖”与“核心合作伙伴奖”两大奖项
详解卡尔曼滤波原理
衡量人机融合好坏的关键指标是什么
2021苹果秋季新品发布即将开始,iphone13发布会直播地址