FreeRTOS----任务优先级

来源:互联网 发布:linux wc 编辑:程序博客网 时间:2024/06/06 17:54

        xTaskCreate()API函数的uxPrddddiority参数为正在创建的任务分配初始优先级。 通过使用vTaskPrioritySet()API函数启动调度程序后,可以更改优先级。

        可用的最大优先级数由FreeRTOSConfig.h中的应用程序定义的configMAX_PRIORITIES编译时配置常量设置。 低数字优先级值表示低优先级任务,优先级为0是可能的最低优先级。 因此,可用优先级的范围为0到(configMAX_PRIORITIES - 1)。 任何数量的任务可以共享相同的优先级 - 确保最大的设计灵活性。

        FreeRTOS调度程序可以使用两种方法之一来决定哪个任务处于运行状态。 可以设置configMAX_PRIORITIES的最大值取决于使用的方法:

1. 通用方法

        通用方法在C中实现,可以与所有FreeRTOS架构端口一起使用。

        当使用通用方法时,FreeRTOS不会限制可以设置configMAX_PRIORITIES的最大值。 然而,始终建议将configMAX_PRIORITIES值保持在必要的最小值,因为它的值越高,将消耗的RAM越多,并且最坏的执行时间将越长。

        如果在FreeRTOSConfig.h中将configUSE_PORT_OPTIMISED_TASK_SELECTION设置为0,或者如果configUSE_PORT_OPTIMISED_TASK_SELECTION未定义,或者通用方法是为使用的FreeRTOS端口提供的唯一方法,则将使用通用方法。

2.架构优化方法

        架构优化方法使用少量的汇编代码,并且比通用方法更快。 configMAX_PRIORITIES设置不会影响最坏的执行时间。

        如果使用架构优化方法,那么configMAX_PRIORITIES不能大于32.  与通用方法一样,建议将configMAX_PRIORITIES保持在必要的最小值,因为它的值越高,RAM将被消耗越多。

        如果在FreeRTOSConfig.h中configUSE_PORT_OPTIMISED_TASK_SELECTION设置为1,将使用体系结构优化方法。

        不是所有的FreeRTOS端口都提供一种架构优化的方法。

        


        FreeRTOS调度程序将始终确保能够运行的最高优先级任务是选择进入运行状态的任务。 如果具有相同优先级的多个任务能够运行,则调度程序将依次转换每个任务进出运行状态。



原创粉丝点击