一. 中断管理体系
本文以 STM32F1,F2,F3,F4 为例(采用 Cortex-M3,M4 内核),内核支持中断嵌套(最多可设置256 个中断优先级)。STM32 只使用其中的 16 个优先级。
如上图所示,RTOS 一般不会将优先级分组,但是会设置为 3 类,优先级最低的中断(级别 15)由Sys tick,PendSV 所使用;中断级别 8~14 的服务程序可以调用内核提供的进程间 通信函数,但是此类中断服务程序会受到内核的影响,中断响应可能被推迟(在进入临界区后,CPU 会设置为忽略为8~15 的优先级中断请求,但中断控制器会锁存这些请求,在告别临界区后重新打开中断便可立即产生中断请求);级别 0~7 的中断服务程序不使用内核提供的任何函数,即内核不会影响这些中断,因此其中断延迟时间是非常短的。
二. 中断延迟的实例
1. 测试简介
初始化 GPIO PA0 为 EXTI 中断,进入临界区后按 PA0(中断源),中断不会即时响应,离开临界区后此中断会被响应。
临界区实现如下,此临界区实现屏蔽掉所有中断优先级的中断,注意在 M3/M4 内核下,可以屏蔽一定级别的中断。
三. FreeRTOS 下的设置
FreeRTOSConfig.h 中
3
|
|
|
|