STM32中断与轮询笔记
中断 VS 轮询
轮询:
周期/连续的检查外部事件是否发生
消耗大量CPU的处理时间
轮询过程需要和其他功能代码结合
由于CPU需要处理其他事件(可能是无关紧要的),可能丢失关键事件
中断:
由硬件来判断是否发生外部事件并通知CPU
专用的中断服务程序来处理事件
中断:
适于处理对响应要求非常高的事件
适于处理持续事件非常短的事件
适于低功耗的应用
程序设计较复杂
轮询:
适于处理对时间响应要求低的场合
程序设计简单
中断服务子程(ISR, Interrupt Service Routine)
在一些CPU中,中断服务子程不同于一般的C函数,函数退出时的返回汇编指令有所区别。(入RTI中断返回指令需完成堆栈操作)
在ARM Cortex M0+平台上,中断服务子程与一般C函数写法没有区别,使用同样的汇编返回指令即可。(堆栈弹出由NVIC自动完成)
中断向量表
中断向量表是一段连续的存储空间
在复位后默认的起始位置
每个中断在向量表中都有相应的表项,该表项的值为该中断对应的服务程序的地址(地址指针)
由程序代码确定中断向量表的每个表项
中断向量表的位置是可以通过改写中断向量基址寄存器重新定位的