首页 > 解决方案 > freeRTOS:关于 API“vTaskPrioritySet”行为的问题

问题描述

在 API 中vTaskPrioritySet

#if ( configUSE_MUTEXES == 1 )
                {
                    /* Only change the priority being used if the task is not
                    currently using an inherited priority. */
                    if( pxTCB->uxBasePriority == pxTCB->uxPriority )
                    {
                        pxTCB->uxPriority = uxNewPriority;
                    }
                    else
                    {
                        mtCOVERAGE_TEST_MARKER();
                    }

                    /* The base priority gets set whatever. */
                    pxTCB->uxBasePriority = uxNewPriority;
                }
#else
......

我注意到一旦priority inheritance发生,将不会设置 uxPriority。我的问题是:如果设置的优先级vTaskPrioritySet高于继承的优先级,为什么不使用更高的优先级?

像这样:

if( pxTCB->uxBasePriority == pxTCB->uxPriority || uxNewPriority > pxTCB->uxPriority )
{
    pxTCB->uxPriority = uxNewPriority;
}

否则,设置的优先级vTaskPrioritySet在发生之前不会生效disinheritance

标签: embeddedembedded-linuxfreertosrtos

解决方案


推荐阅读