硬汉嵌入式论坛

 找回密码
 立即注册
查看: 792|回复: 4
收起左侧

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

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-11-18 14:57:18 | 显示全部楼层 |阅读模式
像ThreadX,uCOS这种,没有这样的需求。使用RTX5,什么都不加是不行的,需要加上切换函数处理。

函数说明:
12.png


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

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*        函 数 名: AppTaskLED
*        功能说明: LED闪烁。
*        形    参: 无
*        返 回 值: 无
*   优 先 级: osPriorityHigh2 
*********************************************************************************************************
*/
void AppTaskLED(void *argument)
{
    while(1)
    {
                bsp_LedToggle(2);
    }
}

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


改成下面就可以了:

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*        函 数 名: 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();
    }
}

回复

使用道具 举报

20

主题

94

回帖

154

积分

初级会员

积分
154
发表于 2023-11-22 00:37:14 | 显示全部楼层
谢谢指导
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-3-27 17:26:32 | 显示全部楼层
硬汉大佬,在任务里面执行了  osThreadYield(); 但是任务没有切换到其他任务这里因为什么,怎么调试比较好
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-3-27 17:28:52 | 显示全部楼层
硬汉大佬,在A任务里面执行了  osThreadYield();和osDelay(100); 但是没有切换到B 任务和C任务,这个是为什么,应该大概怎么调试那,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2024-3-28 09:51:47 | 显示全部楼层
zkm123 发表于 2024-3-27 17:28
硬汉大佬,在A任务里面执行了  osThreadYield();和osDelay(100); 但是没有切换到B 任务和C任务,这个是为什 ...

看看是不是卡死在什么地方了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 21:11 , Processed in 0.183089 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表