FreeRTOS中断部分知识点

发布时间 2023-06-30 13:12:34作者: 祈愿树下

前言

这边看到中断部分,发现视频讲的很底层,我暂时听了容易忘记。所以记录一下我认为重要的知识点。

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任务延时函数

在临界区内不准使用!!!

在中断函数中不准使用!!!