赞
踩
一、中断向量表里有什么?它放在那里?到底有什么用?
1、中断向量表实际上就是存放在Code区(也就是STM32内部的Flash区)从0x00000000地址开始的一个数组,数组的成员为4个字节,而且这些数组在启动文件的时候已经初始化好。
2、STM32根据内核和外设中断优先级,同一标号,标号越小,优先级越大。然后把内核和外设的中断服务函数的地址放在这个数组里面,数组的下标跟中断的优先级对应,我们也把这个中断的编号叫做中断向量。
3、在启动文件执行的时候,内核和每个外设的中断服务函数的地址都是已经确定好的,地址就存放在中断向量表中,而且在启动文件里面已经写好了中断服务函数,只是这些中断服务函数为空,而且带[weak]弱定义,那么我们就需要在C文件里面重新实现这个中断服务函数,用户写这个中断服务函数的时候,函数名必须跟启动文件里面写的中断函数名对应,因为函数名对应的就是中断服务函数的地址,如果中断服务函数名和启动文件的名字不一样,就默认启动文件里面预先写好的空的中断服务函数,而且是一个死循环,程序就会一直卡死在中断服务函数里面。
二、那内核是如何响应中断的呢?
当中断来临的时候,首先取向量,每个中断的中断向量不一样,然后根据向量查询中断向量表,根据里面的地址找到中断服务函数,从而实现整个中断的响应过程。
https://blog.csdn.net/ZDQ1431/article/details/106374285?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164056830016780271563120%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164056830016780271563120&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-12-106374285.pc_search_result_cache&utm_term=%E5%BC%82%E5%B8%B8%E5%90%91%E9%87%8F%E8%A1%A8%E5%92%8C%E4%B8%AD%E6%96%AD%E5%90%91%E9%87%8F%E8%A1%A8&spm=1018.2226.3001.4187
异常向量概念 : 当异常发生的时候, 程序被强行从一个固定的内存地址执行, 每个种类的异常都有对应的一固定内存地址, 这个内存地址就是异常向量 ;
异常类型 : ARM 架构 支持 七种类型的异常,
1.Reset : 处理器在工作时, 突然 按下重启键, 就会触发该异常;
2.Undefined instructions : 处理器无法识别指令的异常, 处理器执行的指令是有规范的, 如果 尝试执行 不符合要求的指令, 就会进入到该异常指令对应的地址中;
3.Software interrupt (SWI) : 软中断, 软件中需要去打断处理器工作, 可以使用软中断来执行 ;
4.Prefetch Abort (instruction fetch memory abort) : 预取指令失败, ARM 在执行指令的过程中, 要先去预取指令准备执行, 如果预取指令失败, 就会产生该异常;
5.Data Abort (data access memory abort) : 读取数据失败;
6.IRQ (interrupt) : 普通中断;
7.FIQ (fast interrupt) : 快速中断, 快速中断要比普通中断响应速度要快一些;
原文链接:https://blog.csdn.net/shulianghan/article/details/80163777
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。