野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 306150|回复: 787

STM32的中断向量表是干什么的?到底有什么用?它放在哪里?90%的人不知道

  [复制链接]
发表于 2016-10-8 09:28:44 | 显示全部楼层 |阅读模式
1-如果你是初学者,那么什么是中断向量表是什么你都没有听说过
2-如果你学STM32一段时间了,估计你也只是听过,但是不知道中断向量表里面存的是什么,还有人认为里面存的是程序

那中断向量表里面到底是什么,它放在哪里?到底有什么用?
1-中断向量表实际上就是存放在code区0地址开始的一个数组,数组的成员为4个字节,而且这些数组在启动文件的时候已经初始化好,既然初始化好,那里面存放的是什么?
2-STM32根据内核和外设中断优先级,统一标号,标号越小,优先级越大。然后把内核和外设的中断服务函数的地址放到这个数组里面,数组的下标跟中断的优先级对应,我们也把这个中断的编号叫做中断向量。
3-在启动文件执行的时候,内核和每个外设的中断服务函数的地址都是已经确定好的,地址就存放在中断向量表中,而且在启动文件里面已经写好了中断服务函数,只是这些中断服务函数为空,而且带[weak]弱定义,那么我们就需要在C文件里面重新实现这个中断服务函数,用户写这个中断服务函数的时候,函数名必须跟启动文件里面写的中断函数名对应,因为函数名对应的就是中断服务函数的地址,如果名字搞错了,那么在响应中断的时候,就默认响应启动文件里面预先写好的空的中断服务函数,而且是一个死循环。

那内核是是如何响应中断的呢?
当中断来临的时候,首先取向量,每个中断的中断向量不一样,然后根据向量查询中断向量表,根据表里面的地址找到中断服务函数,从而实现整个中断的响应过程。

如果你真正理解了什么是中断向量表
1-那么你在C文件里面写中断服务函数的时候就知道为什么要这样写中断服务函数的名字,而且你也可以修改启动文件里面的中断向量表里面的地址(即修改函数名字即可)。
2-在后面移植ucosiii等os的时候,也知道PendSV要怎么移植和修改

回复

使用道具 举报

发表于 2016-10-8 09:31:50 | 显示全部楼层
回复

使用道具 举报

发表于 2016-10-8 09:31:52 | 显示全部楼层
                  
回复 支持 反对

使用道具 举报

发表于 2016-10-8 09:31:52 | 显示全部楼层
                  
回复 支持 反对

使用道具 举报

发表于 2016-10-8 09:32:14 | 显示全部楼层
姐姐家基金基金基金基金基金基金基金基金基金基金
回复 支持 反对

使用道具 举报

发表于 2016-10-8 09:32:32 | 显示全部楼层
玩八位机,几乎都要用到中断向量
回复 支持 反对

使用道具 举报

发表于 2016-10-8 09:32:54 | 显示全部楼层
向量表到底是干嘛用的呢,有人可以把stm32做成boot一部分,然后应用程序一部分,这个是怎么实现的呢
回复 支持 反对

使用道具 举报

发表于 2016-10-8 09:33:44 | 显示全部楼层
66666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2016-10-8 09:34:18 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2016-10-8 09:34:37 | 显示全部楼层
Hankin 发表于 2016-10-8 09:32
玩八位机,几乎都要用到中断向量

8位机里面没有中断向量的概念吧
回复 支持 1 反对 0

使用道具 举报

发表于 2016-10-8 09:35:22 | 显示全部楼层
知道一点点,看了火哥的,就更清楚了
回复 支持 反对

使用道具 举报

发表于 2016-10-8 09:40:25 | 显示全部楼层
看一下,学习学习
回复 支持 反对

使用道具 举报

发表于 2016-10-8 09:40:43 | 显示全部楼层
来看看火哥
回复 支持 反对

使用道具 举报

发表于 2016-10-8 09:43:00 | 显示全部楼层
可是,为什么要重映射向量表呢?偏移地址又是不是可以任意设置在Flash中的地址呢?
回复 支持 反对

使用道具 举报

发表于 2016-10-8 09:44:01 | 显示全部楼层
跟着火哥学习
回复 支持 反对

使用道具 举报

发表于 2016-10-8 09:47:38 | 显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回复 支持 反对

使用道具 举报

发表于 2016-10-8 09:48:52 | 显示全部楼层
看一看吧
回复

使用道具 举报

发表于 2016-10-8 09:52:53 | 显示全部楼层
只知道51的中断向量表
回复 支持 反对

使用道具 举报

发表于 2016-10-8 10:02:15 | 显示全部楼层
顶顶顶顶顶顶
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-8 10:06:20 | 显示全部楼层
宵待雨月 发表于 2016-10-8 09:43
可是,为什么要重映射向量表呢?偏移地址又是不是可以任意设置在Flash中的地址呢?

1-重映射向量表就是改变这个数组在code里面的存储位置而已
2-地址可以随便设置,但是必须4字节对齐
回复 支持 反对

使用道具 举报

发表于 2016-10-8 10:14:30 | 显示全部楼层
中断程序入口
回复 支持 反对

使用道具 举报

发表于 2016-10-8 10:47:08 | 显示全部楼层
看看怎么说
回复 支持 反对

使用道具 举报

发表于 2016-10-8 11:30:55 | 显示全部楼层
fire 发表于 2016-10-8 10:06
1-重映射向量表就是改变这个数组在code里面的存储位置而已
2-地址可以随便设置,但是必须4字节对齐

火哥,你说向量表是地址0处的一个数组,重映射是改变数组的位置,可是为什么要改变位置呢,就按初始化后的0地址不好吗?

地址可以随便设置,那么设置0行不行呢,或者说设置在0~0x20000000这块没有Flash也没有SRAM的区间也没问题吗?

谢谢火锅!
回复 支持 反对

使用道具 举报

发表于 2016-10-8 12:11:51 | 显示全部楼层
来学习了、、、、、、、、、、、
回复 支持 反对

使用道具 举报

发表于 2016-10-8 13:31:24 | 显示全部楼层
来学习~~~~~
回复

使用道具 举报

 楼主| 发表于 2016-10-8 13:42:26 | 显示全部楼层
宵待雨月 发表于 2016-10-8 11:30
火哥,你说向量表是地址0处的一个数组,重映射是改变数组的位置,可是为什么要改变位置呢,就按初始化后 ...

1-因为有些人就是喜欢作死,所以有爱改
2-不行,必须放到CODE区,就是STM32内部的FLASH的区域
回复 支持 反对

使用道具 举报

发表于 2016-10-8 13:49:16 | 显示全部楼层
其实为在学习的过程中把中断向量表比作32的“中断游戏规则”你要想玩游戏就必须遵守游戏规则。没有人可以打破这样的规则。除非你绝对的牛逼,可以制定游戏规则
回复 支持 1 反对 0

使用道具 举报

发表于 2016-10-8 13:58:19 | 显示全部楼层
中断函数入口
回复 支持 反对

使用道具 举报

发表于 2016-10-8 15:14:24 | 显示全部楼层
先学习学习,看看中断向量表
回复 支持 反对

使用道具 举报

发表于 2016-10-8 15:29:28 | 显示全部楼层
存的是地址,呵呵
回复 支持 反对

使用道具 举报

发表于 2016-10-8 15:30:31 | 显示全部楼层
yaoxi        
回复 支持 反对

使用道具 举报

发表于 2016-10-8 16:28:12 | 显示全部楼层
为啥要回复才能看呢
回复 支持 反对

使用道具 举报

发表于 2016-10-8 17:32:21 | 显示全部楼层
学习学习。
回复

使用道具 举报

发表于 2016-10-8 17:47:31 | 显示全部楼层
学习学习,基础知识很重要啊
回复 支持 反对

使用道具 举报

发表于 2016-10-8 18:02:41 | 显示全部楼层
过来参观
回复

使用道具 举报

发表于 2016-10-8 19:02:56 | 显示全部楼层
初学者  看看
回复 支持 反对

使用道具 举报

发表于 2016-10-8 19:19:10 | 显示全部楼层
学习学习。。。。。
回复

使用道具 举报

发表于 2016-10-8 20:58:43 | 显示全部楼层
学习学习
回复

使用道具 举报

发表于 2016-10-8 21:53:29 | 显示全部楼层
查看中断方式吧,不是很清楚
回复 支持 反对

使用道具 举报

发表于 2016-10-9 07:49:09 | 显示全部楼层
跟着学习!
回复

使用道具 举报

发表于 2016-10-9 09:13:02 | 显示全部楼层
:):)
回复

使用道具 举报

发表于 2016-10-9 10:56:48 | 显示全部楼层
学习学习
回复

使用道具 举报

发表于 2016-10-9 11:48:53 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

发表于 2016-10-9 12:52:15 | 显示全部楼层
我要学习一下
回复 支持 反对

使用道具 举报

发表于 2016-10-9 22:41:43 | 显示全部楼层
学习学习               
回复 支持 反对

使用道具 举报

发表于 2016-10-10 12:26:44 | 显示全部楼层
好好好好好
回复 支持 反对

使用道具 举报

发表于 2016-10-10 13:07:07 | 显示全部楼层
感觉很有用,然而小白的我不懂
回复 支持 反对

使用道具 举报

发表于 2016-10-10 13:56:11 | 显示全部楼层
看看看看看看看看看看看看
回复 支持 反对

使用道具 举报

发表于 2016-10-10 18:34:44 | 显示全部楼层
是中断服务函数的入口地址,放在启动文件里面。
回复 支持 反对

使用道具 举报

发表于 2016-10-10 22:20:02 | 显示全部楼层
学习学习学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-18 08:04 , Processed in 0.052225 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表