找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2543|回复: 1
收起左侧

时间片轮询法中,如何处理同一时间不同任务

[复制链接]
ID:505446 发表于 2019-4-5 19:01 | 显示全部楼层 |阅读模式
Task_Struct tasks[] =
{
   {0,200,200,task1},  //用各个任务的函数名初始化
   {0,60,60,task2},
   {0,100,100,task3},
   {0,10,10,task4}
};     
比如在此任务数组中有4个任务,但是每个任务的时间片是不同的。200ms/60ms/100ms/10ms
所以能在4个不同时间片执行相应的任务。
我的问题是在同一个时间片如何处理不同任务?
比如定时60秒的时间片,60秒到要处理显示更新以及倒计时这两个任务该如何解决?
(1)Task_Struct tasks[] =
{
     {0,60,60,task1},//任务一显示更新
     {0,60,60,task2},//任务二倒计时
}
(2)Task_Struct tasks[] =
{
     {0,60,60,task1}
}

void task1()
{
      work1();//任务一显示更新
      work2();//任务二倒计时
}
这两种方法行不行的通?或者有没更好的方法能够解决?
注:关于时间片轮解释如下
回复

使用道具 举报

ID:323651 发表于 2020-12-26 13:52 | 显示全部楼层
需要注意的是,这种方法的前提是执行的 每个任务都是短小精悍的,要不然一个任务执行的时间过长,大于其它任务设置的时间片值,那其它任务就无法保证按它预设的时间片来执行。

尤其需要注意任务中延时的使用,可能会产生不可预料的结果。如果任务内部需要延时的时候,或者说单个任务过长,需要保存任务执行到一半的状态,建议使用状态机切割长任务。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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