查看: 2235|回复: 1

[开发求助] 为什么 uCOS-Ⅱ一个任务通常是一个无限循环

[复制链接]

16

主题

20

帖子

46

积分

助理工程师

Rank: 1

积分
46
发表于 2019-12-19 11:59:14 | 显示全部楼层 |阅读模式
为什么 uCOS-Ⅱ一个任务通常是一个无限循环(返回值类型void)???答:

“任务”和“人”,在某些方面有相似之处:一般意义上,人做事不会是做完后就把这个人干掉,再有事时又去生一个来做事,那样的话成本太高,成本较低的办法是让这个人在没事的时候休息就行了,同样的道理,任务没事的时候,让任务睡眠并等待下一个事情,有事了就醒来继续做事,比杀掉任务,有事再创建一个任务,成本更低。
于是,任务的基本特点之一就是:有事做事,无事休息。人又何尝不是如此?
任务做的事,总是设计好的那些,不会有什么变化,而你从小到大,宏观上虽然变化很大,但具体到某一阶段,又是非常固定,比如大学三点一线。
于是,任务的另一个基本特点就是:重复性或周期性。

下面就是一个任务的典型结构:
  • void task()
  • {
  •     while (1) {
  •         event = wait();     // 睡眠(阻塞)并等待事件,发生事件后即被唤醒
  •         if (event == event1) {  // 事件1到来
  •             do_something1();    // 做事1
  •         } else if (event == event2) {  // 事件2到来
  •             do_something2();    // 做事2
  •         }
  •         ....
  •     }
  • }

[color=rgb(51, 102, 153) !important]复制代码

对于那些所谓的“一次性任务”,完全是没有理由存在的,如果谁用到了,一定是项目设计不合理。

这个回答精准吗


[url=]更多操作[/url]




回复

使用道具 举报

1

主题

39

帖子

47

积分

助理工程师

Rank: 1

积分
47
发表于 2021-6-23 16:54:18 | 显示全部楼层
厉害,目前学习中,顶一下
回复

使用道具 举报

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

本版积分规则

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