一、中断处理函数注意点
1、不能传参
2、不能返回值
3、注意不可重入性
4、要精简
5、修改的全局变量,在定义时要加voliate
6、不能进行浮点运算
不可重入:malloc、free(两者使用了全局内存分配表)、printf(引用全局stdout)、标准IO函数、均为不可重入函数。被static修饰的函数或变量,也是不可重入的。
二、中断向量表里有什么?它放在那里?到底有什么用?
1、中断向量表实际上就是存放在Code区(也就是STM32内部的Flash区)从0x00000000地址开始的一个数组,数组的成员为4个字节,而且这些数组在启动文件的时候已经初始化好。
2、STM32根据内核和外设中断优先级,统一标号,标号越小,优先级越大。然后把内核和外设的中断服务函数的地址放在这个数组里面,数组的下标跟中断的优先级对应,我们也把这个中断的编号叫做中断向量。
3、在启动文件执行的时候,内核和每个外设的中断服务函数的地址都是已经确定好的,地址就存放在中断向量表中,而且在启动文件里面已经写好了中断服务函数,只是这些中断服务函数为空,而且带[weak]弱定义,那么我们就需要在C文件里面重新实现这个中断服务函数,用户写这个中断服务函数的时候,函数名必须跟启动文件里面写的中断函数名对应,因为函数名对应的就是中断服务函数的地址,如果中断服务函数名和启动文件的名字不一样,就默认启动文件里面预先写好的空的中断服务函数,而且是一个死循环,程序就会一直卡死在中断服务函数里面。
三、那内核是如何响应中断的呢?
当中断来临的时候,首先取向量,每个中断的中断向量不一样,然后根据向量查询中断向量表,根据里面的地址找到中断服务函数,从而实现整个中断的响应过程。
中断处理函数有特定要求,如不能传参或返回值,需精简且不可重入。中断向量表存储在STM32的Flash区,包含了中断服务函数的地址,按优先级排序。中断发生时,系统通过向量表找到服务函数地址以响应中断。

347

被折叠的 条评论
为什么被折叠?



