freeRTOS中文实用教程3--中断管理之中断嵌套
1.前言
最新的 FreeRTOS 移植中允许中断嵌套。中断嵌套需要在 FreeRTOSConfig.h 中设置configKERNEL_INTERRUPT_PRIORITY 和configMAX_SYSCALL_INTERRUPT_PRIORITY
2.控制中断嵌套的常量
常量 | 描述 |
configKERNEL_INTERRUPT_PRIORITY |
设置系统心跳时钟的中断优先级。 如 果 在 移 植 中 没 有 使 用 常 量 configMAX_SYSCALL_INTERRUPT_PRIORITY,那么需要调用中断安全版本 FreeRTOS API 的中断都必须运行在此优先级上。 |
configMAX_SYSCALL_INTERRUPT_PRIORITY |
设置中断安全版本 FreeRTOS API 可以运行的最高中断优先级。
|
3.建立全面的中断嵌套模型
(1)建立一个全面的中断嵌套模型需要设置 configMAX_SYSCALL_INTERRUPT_PRIRITY为比 configKERNEL_INTERRUPT_PRIORITY 更高的优先级
如上假定常量 configMAX_SYSCALL_INTERRUPT_PRIRITY 设置为 3,configKERNEL_INTERRUPT_PRIORITY 设置为 1
(2)假定这种情形基于一个具有七个不同中断优先及的微控制器。这里的七个优先级仅仅是本例的一种假定,并非对应于任何一种特定的微控制器架构
(3)处于中断优先级 1 到 3(含)的中断会被内核或处于临界区的应用程序阻塞执行, 但是它们可以调用中断安全版本的 FreeRTOS API 函数
(4)处于中断优先级 4 (高于configMAX_SYSCALL_INTERRUPT_PRIRITY)及以上的中断不受临界区影响,所以其不会被内核的任何行为阻塞,可以立即得到执行
注:这是由微控制器本身对中断优先级的限定所决定的。通常 需 要 严 格 时 间 精 度 的 功 能 ( 如 电 机 控 制 ) 会 使 用 高 于configMAX_SYSCALL_INTERRUPT_PRIRITY 的优先级,
以保证调度器不会对其中断响应时间造成抖动
(5)不需要调用任何 FreeRTOS API 函数的中断,可以自由地使用任意优先级
4.中断优先级与任务优先级的区别
(1)中断优先级是由微控制器架构体系所定义的。
(2)中断优先级是硬件控制的优先级,中断服务例程的执行会与之关联。
(3)任务并非运行在中断服务中,所以赋予任务的软件优先级与赋予中断源的硬件优先级之间没有任何关系
5.参考文档
[1] FreeRTOS中文实用教程