关于IAP实验中两个中断向量表的疑问

2019-08-17 04:29发布

  在IAP实验中有两个中断向量表,一个是IAP程序设置的中断向量表,地址是0X80000004,还有一个是APP程序设置的中断向量表,地址是在0X80010004,然后在APP程序中(假设APP程序已经下载完成)发生中断时,原子哥强调说程序仍然会跳转到0X80000004所在的中断向量表中,那么按照这种说法,那CPU会根据0X80000004中中断向量表里的中断入口函数地址,应该会去找到IAP程序里的中断函数,而不会找到APP程序里的中断函数。那APP程序里的程序就不会执行了啊。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
正点原子
1楼-- · 2019-08-17 09:19
因为设置了偏移,第二次进入中断的时候,硬件自动加偏移量!!
shikihane
2楼-- · 2019-08-17 13:06
 精彩回答 2  元偷偷看……
kevin_shen
3楼-- · 2019-08-17 14:19
shikihane 发表于 2017-4-13 09:32
应用程序里,SCB->VTOR = FLASH_BASE | 0x8000;

我的理解  这条指令只是告诉CPU建立第二个中断向量表的地址是 FLASH_BASE | 0x8000;而没法改变第一个中断向量表里所有中断函数的入口地址啊,发生中断时CPU还是会按照0X80000004里中断函数的地址去找中断函数,那找到的中断函数应该是在IAP程序里而不是APP程序里。
shikihane
4楼-- · 2019-08-17 17:50
kevin_shen 发表于 2017-4-13 09:47
我的理解  这条指令只是告诉CPU建立第二个中断向量表的地址是 FLASH_BASE | 0x8000;而没法改变第一个中断 ...

不是告诉,是直接改变了。整个向量表地址向后偏移了。第一个表回不去了。
kevin_shen
5楼-- · 2019-08-17 21:32
shikihane 发表于 2017-4-13 11:49
不是告诉,是直接改变了。整个向量表地址向后偏移了。第一个表回不去了。

回不去是什么意思?第一个中断向量表里的地址改变了? 那发生中断的时候是去第二个表找中断函数地址还是去第一个表找中断函数地址
shikihane
6楼-- · 2019-08-17 23:10
kevin_shen 发表于 2017-4-13 11:57
回不去是什么意思?第一个中断向量表里的地址改变了? 那发生中断的时候是去第二个表找中断函数地址还是 ...

就是说,改完偏移以后,以后都用那个位置的表了。复位中断例外。

一周热门 更多>