eric2013 发表于 2023-11-18 14:57:18

RTX5同优先级任务之间调度切换,如果没有调用osDelay之类的切换,函数osThreadYield()要加上

像ThreadX,uCOS这种,没有这样的需求。使用RTX5,什么都不加是不行的,需要加上切换函数处理。

函数说明:



比如这样写,是不可以的:

/*
*********************************************************************************************************
*      函 数 名: AppTaskLED
*      功能说明: LED闪烁。
*      形    参: 无
*      返 回 值: 无
*   优 先 级: osPriorityHigh2
*********************************************************************************************************
*/
void AppTaskLED(void *argument)
{
    while(1)
    {
                bsp_LedToggle(2);
    }
}

/*
*********************************************************************************************************
*      函 数 名: AppTaskMsgPro
*      功能说明: 消息处理,暂未使用。
*      形    参: 无
*      返 回 值: 无
*   优 先 级: osPriorityHigh3
*********************************************************************************************************
*/
void AppTaskMsgPro(void *argument)
{
    while(1)
    {
                bsp_LedToggle(1);
    }
}


改成下面就可以了:

/*
*********************************************************************************************************
*      函 数 名: AppTaskLED
*      功能说明: LED闪烁。
*      形    参: 无
*      返 回 值: 无
*   优 先 级: osPriorityHigh2
*********************************************************************************************************
*/
void AppTaskLED(void *argument)
{
    while(1)
    {
                bsp_LedToggle(2);
                osThreadYield();
    }
}

/*
*********************************************************************************************************
*      函 数 名: AppTaskMsgPro
*      功能说明: 消息处理,暂未使用。
*      形    参: 无
*      返 回 值: 无
*   优 先 级: osPriorityHigh3
*********************************************************************************************************
*/
void AppTaskMsgPro(void *argument)
{
    while(1)
    {
                bsp_LedToggle(1);
                osThreadYield();
    }
}

ifree 发表于 2023-11-22 00:37:14

谢谢指导

zkm123 发表于 2024-3-27 17:26:32

硬汉大佬,在任务里面执行了osThreadYield(); 但是任务没有切换到其他任务这里因为什么,怎么调试比较好

zkm123 发表于 2024-3-27 17:28:52

硬汉大佬,在A任务里面执行了osThreadYield();和osDelay(100); 但是没有切换到B 任务和C任务,这个是为什么,应该大概怎么调试那,:lol

eric2013 发表于 2024-3-28 09:51:47

zkm123 发表于 2024-3-27 17:28
硬汉大佬,在A任务里面执行了osThreadYield();和osDelay(100); 但是没有切换到B 任务和C任务,这个是为什 ...

看看是不是卡死在什么地方了。
页: [1]
查看完整版本: RTX5同优先级任务之间调度切换,如果没有调用osDelay之类的切换,函数osThreadYield()要加上