搜索
bottom↓
回复: 4
打印 上一主题 下一主题

FreeRTOS任务调度问题请教

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2022-12-2 23:07:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lingdianhao 于 2022-12-2 23:09 编辑

调度配置:
开启了抢占式调度,关闭了时间片调度。

任务情况:
系统除空闲任务外共有3个任务。
task1任务优先级为2
task2任务优先级为2
task3任务优先级为3

uint8_t task_counter_1 = 0;
uint8_t task_counter_2 = 0;
uint8_t task_counter_3 = 0;

void task1(void* ptr)
{
        while(1)
        {
                task_counter_1++ ;
        }
}

void task2(void* ptr)
{
        while(1)
        {
                task_counter_2++ ;
        }
}

void task3(void* ptr)
{
        while(1)
        {
                vTaskDelay(10);
                task_counter_3++ ;
        }
}

测试1:只创建任务1和任务2,因为关闭时间片调度,任务1和任务2优先级相同,只有task1得到执行,task2得不到执行。
测试2:创建任务1,任务2,任务3,此时出现task1和task2被轮流执行的情况,因为一个更高优先级的任务3加入而导致已有的两个同优先级任务运行结果不一致。
我想要的功能是任务1和任务2同优先级,只要在运行的任务没有主动释放CPU其他同优先级任务就不能执行,即使有更高优先级任务把它打断,返回后也能继续执行被打断的任务,而不是切换到下一个同优先级任务,因为我已经关闭了时间片调度,就不应该出现任务1和任务2能轮流执行共享时间片的情况。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入8汤圆

2
发表于 2022-12-3 09:22:41 来自手机 | 只看该作者
任务1与任务2共享一个信号量不就行了。谁申请到谁运行。用完了再释放

出0入0汤圆

3
发表于 2022-12-3 09:38:37 | 只看该作者
我知道的在FreeRTOS没有配置可以实现你的需求,如果要实现的话,需要修改FreeRTOS的code,可以看下 listGET_OWNER_OF_NEXT_ENTRY ,这个是切换同级任务的。

出0入131汤圆

4
发表于 2022-12-3 11:28:21 | 只看该作者
我觉得不能设置成一个优先级。

出0入0汤圆

5
发表于 2022-12-3 12:25:17 | 只看该作者
liwei_jlu 发表于 2022-12-3 09:22
任务1与任务2共享一个信号量不就行了。谁申请到谁运行。用完了再释放
(引用自2楼)

对的,用信号量可以实现他说的问题,优先级不一样。
在需要释放的时候:

释放信号量
延时一点时间
等待信号量
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 15:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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