请教关于RTOS优先级0 到 configMAX_PRIORITIES – 1的问题。
教程中说到:FreeRTOS 中任务的最高优先级是通过 FreeRTOSConfig.h 文件中的 configMAX_PRIORITIES 进行配置的,用户实际可以使用的优先级范围是 0 到 configMAX_PRIORITIES – 1。比如我们配置此宏定义为 5,那么用户可以使用的优先级号是 0,1,2,3,4,不包含 5,对于这一点,初学者要特别的注意。
但是在STM32 Cube MX生成的源码中的优先级枚举是这样的
// ==== Enumeration, structures, defines ====
/// Priority used for thread control.
/// \note MUST REMAIN UNCHANGED: \b osPriority shall be consistent in every CMSIS-RTOS.
typedef enum{
osPriorityIdle = -3, ///< priority: idle (lowest)
osPriorityLow = -2, ///< priority: low
osPriorityBelowNormal = -1, ///< priority: below normal
osPriorityNormal =0, ///< priority: normal (default)
osPriorityAboveNormal = +1, ///< priority: above normal
osPriorityHigh = +2, ///< priority: high
osPriorityRealtime = +3, ///< priority: realtime (highest)
osPriorityError =0x84 ///< system cannot determine priority or thread has illegal priority
} osPriority;
1.这个枚举是负数
2.这个优先级是如何 和教程中的 0 到 configMAX_PRIORITIES – 1 对应的?
CMSIS-RTOS V1别研究它了,已经被ARM淘汰了,直接看CMSIS-RTOS V2
将其直接配置到最大
#define configMAX_PRIORITIES 56
/// Priority values.
typedef enum {
osPriorityNone =0, ///< No priority (not initialized).
osPriorityIdle =1, ///< Reserved for Idle thread.
osPriorityLow =8, ///< Priority: low
osPriorityLow1 =8+1, ///< Priority: low + 1
osPriorityLow2 =8+2, ///< Priority: low + 2
osPriorityLow3 =8+3, ///< Priority: low + 3
osPriorityLow4 =8+4, ///< Priority: low + 4
osPriorityLow5 =8+5, ///< Priority: low + 5
osPriorityLow6 =8+6, ///< Priority: low + 6
osPriorityLow7 =8+7, ///< Priority: low + 7
osPriorityBelowNormal = 16, ///< Priority: below normal
osPriorityBelowNormal1= 16+1, ///< Priority: below normal + 1
osPriorityBelowNormal2= 16+2, ///< Priority: below normal + 2
osPriorityBelowNormal3= 16+3, ///< Priority: below normal + 3
osPriorityBelowNormal4= 16+4, ///< Priority: below normal + 4
osPriorityBelowNormal5= 16+5, ///< Priority: below normal + 5
osPriorityBelowNormal6= 16+6, ///< Priority: below normal + 6
osPriorityBelowNormal7= 16+7, ///< Priority: below normal + 7
osPriorityNormal = 24, ///< Priority: normal
osPriorityNormal1 = 24+1, ///< Priority: normal + 1
osPriorityNormal2 = 24+2, ///< Priority: normal + 2
osPriorityNormal3 = 24+3, ///< Priority: normal + 3
osPriorityNormal4 = 24+4, ///< Priority: normal + 4
osPriorityNormal5 = 24+5, ///< Priority: normal + 5
osPriorityNormal6 = 24+6, ///< Priority: normal + 6
osPriorityNormal7 = 24+7, ///< Priority: normal + 7
osPriorityAboveNormal = 32, ///< Priority: above normal
osPriorityAboveNormal1= 32+1, ///< Priority: above normal + 1
osPriorityAboveNormal2= 32+2, ///< Priority: above normal + 2
osPriorityAboveNormal3= 32+3, ///< Priority: above normal + 3
osPriorityAboveNormal4= 32+4, ///< Priority: above normal + 4
osPriorityAboveNormal5= 32+5, ///< Priority: above normal + 5
osPriorityAboveNormal6= 32+6, ///< Priority: above normal + 6
osPriorityAboveNormal7= 32+7, ///< Priority: above normal + 7
osPriorityHigh = 40, ///< Priority: high
osPriorityHigh1 = 40+1, ///< Priority: high + 1
osPriorityHigh2 = 40+2, ///< Priority: high + 2
osPriorityHigh3 = 40+3, ///< Priority: high + 3
osPriorityHigh4 = 40+4, ///< Priority: high + 4
osPriorityHigh5 = 40+5, ///< Priority: high + 5
osPriorityHigh6 = 40+6, ///< Priority: high + 6
osPriorityHigh7 = 40+7, ///< Priority: high + 7
osPriorityRealtime = 48, ///< Priority: realtime
osPriorityRealtime1 = 48+1, ///< Priority: realtime + 1
osPriorityRealtime2 = 48+2, ///< Priority: realtime + 2
osPriorityRealtime3 = 48+3, ///< Priority: realtime + 3
osPriorityRealtime4 = 48+4, ///< Priority: realtime + 4
osPriorityRealtime5 = 48+5, ///< Priority: realtime + 5
osPriorityRealtime6 = 48+6, ///< Priority: realtime + 6
osPriorityRealtime7 = 48+7, ///< Priority: realtime + 7
osPriorityISR = 56, ///< Reserved for ISR deferred thread.
osPriorityError = -1, ///< System cannot determine priority or illegal priority.
osPriorityReserved = 0x7FFFFFFF///< Prevents enum down-size compiler optimization.
} osPriority_t;
页:
[1]