2360985396 发表于 2023-6-21 17:15:22

请教关于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 对应的?

eric2013 发表于 2023-6-22 11:23:56

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]
查看完整版本: 请教关于RTOS优先级0 到 configMAX_PRIORITIES – 1的问题。