优先级别

优先级别

官方文档参考 129 2.23 uxTaskPriorityGet() [[FreeRTOS_Reference_Manual_V10.0.0.pdf#page=129&selection=0,3,4,19|FreeRTOS_Reference_Manual_V10.0.0, page 129]]

官方文档参考

129 2.23 uxTaskPriorityGet()

[[FreeRTOS_Reference_Manual_V10.0.0.pdf#page=129&selection=0,3,4,19|FreeRTOS_Reference_Manual_V10.0.0, page 129]]


  1. 任务相关函数。[[5. 优先级别#^33deb2]]
  2. Priority Define:优先级别的定义。[[5. 优先级别#^c0fdfa]]
  3. Same Priority:同样的优先级别下,应用程序时怎样运行的。[[5. 优先级别#^eab7c7]]
  4. Different Priority:不同的优先级别下,应用程序时怎样运行的。[[5. 优先级别#^2eac7a]]
  5. Modify Priority:怎样取得任务的优先级别并修改任务的优先级别,让任务在不同的优先级下运行,优先级别翻转。[[5. 优先级别#^62e8f9]]

任务相关函数

^33deb2

获取任务的优先级

task.h

uBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask );

必须将INCLUDE_ux_TaskPriorityGetconfigUSE_MUTEXES定义为1,此函数才可用。

获得任何任务的基本优先级。任务的基本优先级在互斥锁时,为了避免无限优先级倒置而返回的优先级。
参数:

  • xTask:待查询的任务句柄。传递NULL句柄会导致返回调用任务的基本优先级。

返回:

  • xTask的基本优先级。

设置任务的优先级

^8ea88a

task.h

void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority );

必须将INCLUDE_ux_TaskPriorityGetconfigUSE_MUTEXES定义为1,此函数才可用。

此函数为设置任何任务的优先级。
如果正在设置的优先级高于当前优先级,则函数返回之前会发生上下文切换。
参数:

  • xTask:正在设置优先级任务的句柄。空句柄会设置当调用任务的优先级。
  • uxNewPriority:将要设置任务的优先级。

断言优先级低于configMAX_priority。如果未定义configASSERT,则优先级会被静默限制为(configMAX_PRIORITIES - 1)

Priority Define

^c0fdfa

每个任务均被分配了从 0 到 (configMAX_PRIORITY - 1)的优先级,这个宏被定义在了freertos/config/include/freertos/FreeRTOSConfig.h中。
文件中显示,可配置的优先级数量为25,因为优先级从0开始,范围为0 ~ 24,一共25个,所以最大优先级是24

如果将任务优先级改为超过24,程序会崩溃,单片机无限重启。

Same Priority

^eab7c7

如果任务具有同样的优先级,那么任务会共享CPU的时间,用时间片的方法来使每一个任务得到相同的运行时间。另外,在程序中,哪个任务先创建,就先运行。

Different Priority

^2eac7a

如果任务具有不同的优先级,则会优先运行最先创建的任务,其他任务创建完成后,会根据不同任务的优先级来优先运行相对应的任务。

Modify Priority

^62e8f9

设置任务优先级。[[5. 优先级别#^8ea88a]]

Comment