- 传送门:博客汇总帖
- 传送门:Cortex-M3_中断、异常
- 传送门:Cortex-M3笔记_基础
笔记内容参考(正点原子的FreeRTOS开发手册、cortex-m3权威指南、Cortex-M3和Cortex-M4权威指南等)
文中stm32指的是F1及F4
文章目录
1、中断配置宏
STM32使用FreeRTOS,须将优先级分组设为组4(4位全部是抢占优先级),所以就有(0-15)16个优先级。且优先级数字越小,优先级越高。
1.1 configPRIO_BITS
设置MCU使用几位作为优先级配置,定义优先级的寄存器有8位,但STM32只使用了高4位做为优先级配置,所以此宏定义为4
1.2 configLIBRARY_LOWEST_INTERRUPT_PRIORITY
设置最低优先级15
1.3 configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY
定义了受FreeRTOS管理的最高优先级中断。简单的说就是允许用户在这个中断服务程序里面调用FreeRTOS的API的最高优先级。设置NVIC的优先级分组为4的情况下。配置configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY为5,表示用户可以在抢占式优先级为5-15的中断里面调用FreeRTOS的API函数,抢占式优先级为0-4的中断里面是不允许调用的。不受FreeRTOS管理的中断有什么深层的含义吗?
讲解不受FreeRTOS管理的中断之前要说一个小知识点----中断延迟。中断延迟时间是衡量RTOS实时操作系统的一项重要指标,那什么又是中断延迟呢?从中断触发到执行中断服务程序的第一条指令这段时间就是中断延迟时间。
FreeRTOS内核源码中有多处开关全局中断的地方,这些开关全局中断会加大中断延迟时间。比如在源码的某个地方关闭了全局中断,但是此时有外部中断触发,这个中断的服务程序就需要等到再次开启全局中断后才可以得到执行。开关中断之间的时间越长,中断延迟时间就越大,这样极其影响系统的实时性。如果这是一个紧急的中断事件,得不到及时执行的话,后果是可想而知的。
针对这种情况,FreeRTOS就专门做了一种新的开关中断实现机制。关闭中断时仅关闭受FreeRTOS管理的中断,不受FreeRTOS管理的中断不关闭,这些不受管理的中断都是高优先级的中断,用户可以在这些中断里面加入需要实时响应的程序。FreeRTOS能够实现这种功能的奥秘就在于FreeRTOS开关中断使用的是寄存器BASEPRI,这个在下面的链接记录(2.3.1 PRIMASK, FAULTMASK 和 BASEPRI)
- 传送门: