打印
[STM32F1]

关于STM32的中断向量表的重映射问题

[复制链接]
6043|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiero39|  楼主 | 2015-7-3 15:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
           网上看了很多关于STM32的中断向量表的帖子,估计也就那几个帖子抄来抄去的。但是始终有个问题:为什么要对中断向量表进行重新映射?
​           我看了宋岩的COREM3权威指南上讲“然而,为了动态重分发中断, CM3 允许向量表重定位——从其它地址处开始定位各异常向量。这些地址对应的区域可以是代码区,但也可以是 RAM 区。在 RAM区就可以修改向量的入口地址了。”。但是,感觉说了跟没说一样,没有回答问题的本质。
​           我的疑惑:
​                             1.如果不重新映射的话,中断向量表的地址应该是这样的:0X0000 0000是SP;0X0000 0004是复位向量;0X0000 0008是NMI;后面按照中断编号的顺序依次按4递增。这样的话,不也能存得下中断向量表吗?反正存的是一些函数指针,占不了多少空间,干嘛还要重新映射到其他的地方呢?
​                             2.如果重新映射的话,中断向量表的入口地址就变成0x0800 0000了。但是一开始已经开辟的那部分空间(0x0000 0000......)存放的中断向量表不是就​等于没用吗?
​                             请好心人帮我解答下,在下不甚感激!
沙发
734774645| | 2015-7-3 16:21 | 只看该作者
为何要用这个呢,楼主是用的汇编吗?

使用特权

评论回复
板凳
jiero39|  楼主 | 2015-7-3 16:29 | 只看该作者
734774645 发表于 2015-7-3 16:21
为何要用这个呢,楼主是用的汇编吗?

”为什么要用这个呢?“,“这个”指的是?

使用特权

评论回复
地板
jcdzxh| | 2015-7-3 17:23 | 只看该作者
运行中修改中断向量

使用特权

评论回复
5
amanda_s| | 2015-7-4 22:55 | 只看该作者
在IAP中就需要进行中断向量表的重映射。
IAP由两部分组成:IAP程序(通过这段程序对用户程序进行升级)和用户程序,这两个程序有各自的中断向量表。一般IAP程序放在FLASH的起始地址,上电首首先执行。执行完后跳到用户程序。这个时候就需要对中断向量表进行重映射,告诉内核该从新的地址取中断向量的值了。否则,来了中断还是跳到到IAP程序的中断向量表中。

使用特权

评论回复
6
amanda_s| | 2015-7-4 22:57 | 只看该作者
ST有个关于Cortex-M内核的视频培训,里面有讲到这部分。
www.stmcu.com.cn中可以下载观看。

使用特权

评论回复
7
菜狗| | 2017-10-13 16:42 | 只看该作者
amanda_s 发表于 2015-7-4 22:55
在IAP中就需要进行中断向量表的重映射。
IAP由两部分组成:IAP程序(通过这段程序对用户程序进行升级)和用 ...

懂了,需要修改中断服务函数。但为什么不直接改原地址内放的函数指针的值呢?这样不是也改了中断服务函数吗

使用特权

评论回复
8
kingkits| | 2017-10-13 17:11 | 只看该作者
对中断向量编程属于比较高级的需求,在学习单片机时,可以先不求甚解,等你真正有需求了,你就知道为什么有这个功能了。

使用特权

评论回复
9
zhuotuzi| | 2017-10-13 17:23 | 只看该作者
这些不修改就可以用了。改的乱了,反而出问题。

使用特权

评论回复
10
fengfeng的恒| | 2017-10-18 14:02 | 只看该作者
菜狗 发表于 2017-10-13 16:42
懂了,需要修改中断服务函数。但为什么不直接改原地址内放的函数指针的值呢?这样不是也改了中断服务函数 ...

为了速度啊。直接改寄存器跳转到指点位置执行会更快啊。不用经过跳转一次。

使用特权

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

本版积分规则

3

主题

18

帖子

1

粉丝