5102|8

29

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

时间片轮询法中,如何处理同一时间不同任务 [复制链接]

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();//任务二倒计时
}
这两种方法行不行的通?或者有没更好的方法能够解决?
注:关于时间片轮解释如下
https://blog.csdn.net/HQ1356466973/article/details/53639209

此帖出自51单片机论坛

最新回复

见3楼帖,实时多任务的调度机制是切换时间片,不存在60s定时时间片就要连续执行60s的问题,更新显示和定时程序的执行都基于定时器中断。不同的任务通常在不同的时间片内执行,放在同一时间片内当然也可以,显示的周期性刷新和延时都是基于定时器的,二者具有关联性。选取适当的定时器溢出周期,令其是显示刷新周期和延时的公约数即可,这样可以利用同一定时器甚至利用定长时间片来实现。  详情 回复 发表于 2018-11-21 16:52
点赞 关注(1)
 

回复
举报

1万

帖子

139

TA的资源

版主

沙发
 
至少对绝大多数MCU而言,同一时刻只能执行一条机器指令,所有的单核处理器都如此。所以,理论上就无法实现同一时间执行不同的任务,甚至都不能执行一条以上的指令。只有多核或在多处理器系统中才有可能,但仍需软件的支持。
此帖出自51单片机论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

1万

帖子

139

TA的资源

版主

板凳
 
在实时多任务操作系统中,“时间片”概念并非“同时”,而是指在一小段周期内。为便于任务调度,一般一个时间片被分配执行某一任务,这样是为了兼顾多任务和执行效率,取得二者间的平衡。但就楼主说的“定时60秒的时间片”,这可不意味着时间片是60秒,一般几条指令就可是实现该功能,时间片其实很短,哪怕是延时6百万秒。所以,宏观来看,在执行定时60秒的指令后,MCU当然会有大把的时间去执行其它指令。
在同一时间片内能不能执行多个任务或功能?当然可以,但这等效于时间片的进一步缩短,过短的时间片会导致频繁任务调度占用机器处理时长过多的问题,进而导致系统整体运行效率下降,所以时间片也不能太短,按需选择为佳。
俺在编制较为复杂的程序时喜欢借鉴实时操作系统的原理和结构,但不直接使用操作系统,也就是一般说的“果(怕被屏蔽故意用错别字)奔”,这样可使程序最短小、执行效率最高,也具备一定的可移植性(非跨平台)。
此帖出自51单片机论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

1368

帖子

6

TA的资源

版主

4
 
如果不同任务想共享一些东西,可以用消息共享
此帖出自51单片机论坛
 
个人签名专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

5
 
chunyang 发表于 2018-11-20 11:44
至少对绝大多数MCU而言,同一时刻只能执行一条机器指令,所有的单核处理器都如此。所以,理论上就无法实现 ...

你好,感谢你的解答。可能我的表述存在问题,我的意思不是让单片机同一时刻处理两个任务,我的意思是同一时间片如何解决两个不同任务的问题,比如60秒时间片到我要更新显示和完成时间倒计时改如何做。当然这两个任务肯定不是同时进行的,但是处于同一时间片。
此帖出自51单片机论坛

点评

见3楼帖,实时多任务的调度机制是切换时间片,不存在60s定时时间片就要连续执行60s的问题,更新显示和定时程序的执行都基于定时器中断。不同的任务通常在不同的时间片内执行,放在同一时间片内当然也可以,显示的周  详情 回复 发表于 2018-11-21 16:52
 
 
 

回复

943

帖子

3

TA的资源

纯净的硅(中级)

6
 
if(60S到了)
{
  60S清掉;  work1(更新显示);
  work2(时间倒计时);
}
是这个意思么?如果是的就这么操作就行
此帖出自51单片机论坛
 
 
 

回复

1万

帖子

139

TA的资源

版主

7
 
邱海涛qht 发表于 2018-11-21 08:49
你好,感谢你的解答。可能我的表述存在问题,我的意思不是让单片机同一时刻处理两个任务,我的意思是同一 ...

见3楼帖,实时多任务的调度机制是切换时间片,不存在60s定时时间片就要连续执行60s的问题,更新显示和定时程序的执行都基于定时器中断。不同的任务通常在不同的时间片内执行,放在同一时间片内当然也可以,显示的周期性刷新和延时都是基于定时器的,二者具有关联性。选取适当的定时器溢出周期,令其是显示刷新周期和延时的公约数即可,这样可以利用同一定时器甚至利用定长时间片来实现。
此帖出自51单片机论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

8
 
chunyang 发表于 2018-11-21 16:52
见3楼帖,实时多任务的调度机制是切换时间片,不存在60s定时时间片就要连续执行60s的问题,更新显示和定 ...

大概 懂了,非常感谢解答
此帖出自51单片机论坛
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

9
 
雨后的梧桐 发表于 2018-11-21 14:49
if(60S到了)
{
  60S清掉;  work1(更新显示);
  work2(时间倒计时);
}
是这个意思么?如果是的 ...

你好,是的,是这个意思。我以前的风格就是这样的形式,用定时器做定时,每个时间点打下一个标志,然后用if做判断然后执行相关子程序。    现在想用时间片轮任务数组的形式表现出来
此帖出自51单片机论坛
 
 
 

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

开源项目 更多>>
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/8 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表