FreeRTOS中断部分知识点
前言
这边看到中断部分,发现视频讲的很底层,我暂时听了容易忘记。所以记录一下我认为重要的知识点。
1. 以 STM32 为例,有 16 个优先级,0 为最高优先级,15 为最低优先级
其中0-4这5个优先级不归FreeRTOS管,是系统的中断(这个5是可以自由设置的,后面有个宏定义可以配置)
5-15后面的中断都是FreeRTOS可操作的
2. FreeRTOSConfig.h 配置文件中对中断这边有配置
/***************************************************************************************************************/
/* FreeRTOS与中断有关的配置选项 */
/***************************************************************************************************************/
#ifdef __NVIC_PRIO_BITS
#define configPRIO_BITS __NVIC_PRIO_BITS
#else
#define configPRIO_BITS 4 //这个是在stm32F10x.h设置的 #define __NVIC_PRIO_BITS 4 /*!< STM32 uses 4 Bits for the Priority Levels */
#endif
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15 //中断最低优先级
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 //系统可管理的最高中断优先级
#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
其中两个宏定义重要
configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY
此宏用来设置 FreeRTOS 系统可管理的最大优先级,也就是在 4.1.5 小节中讲解BASEPRI 寄存器说的那个阈值优先级,这个可以自由设置,这里设置为了 5。也就是高于 5 的优先级(优先级数小于 5)不归 FreeRTOS 管理!
configMAX_SYSCALL_INTERRUPT_PRIORITY
此宏是 configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 左移 4 位而来的,原因和宏 configKERNEL_INTERRUPT_PRIORITY 一样。此宏设置好以后,低于此优先级的中断可以安全的调用 FreeRTOS 的 API 函数,高于此优先级的中断 FreeRTOS 是不能禁止的,中断服务函数也不能调用 FreeRTOS 的 API 函数!
记录一下:
vTaskDelay任务延时函数
在临界区内不准使用!!!
在中断函数中不准使用!!!
本文来自博客园,作者:祈愿树下,转载请注明原文链接:https://www.cnblogs.com/cjl520/p/17516436.html