多任务是现代嵌入式系统的一个特点,从小容量的8位单片机,到32位arm,以至更复杂的控制器,都支持多任务功能。资源少的单片机只能通过时间片方式分时运行多任务,而多核MCU可以同时并行多个任务。
在makecode中,也支持多任务功能。在软件中它被叫做“run in parallel”(并行运行)。run in parallel的使用方法和我们常见的RTOS非常相似,需要在它内部放入一个无限循环,将需要执行的任务放在循环中。此外还要放置暂停模块,这样任务之间才能切换。一个典型的多任务程序结构如下:
在makecode中,多任务的使用也很容易,将它放在初始化(on start)就可以了。如果有多个任务,就依次加到初始化部分。下面是一个基本的多任务程序,主循环(任务1)中每500ms打印一个不断递增的变量y,任务2中每秒打印0-10随机数,任务3显示一个呼吸灯。
在线版本:https://makecode.com/_3Do4v8MiPCcR
MakeCode的多任务可以看成是一个非占先式的、无优先级、时间片轮询的RTOS,一个任务执行后,通过暂停模块切换到其它任务,因此暂停模块是必须使用的,否则会停在一个任务中,无法执行其它任务。无限循环(forover)也是一个特殊的任务,它不需要在加入循环模块和暂停模块,因为无限循环模块中已经内置了这些功能。
一个程序中可以包含多个无限循环,利用无限循环实现多任务。不过对于复杂的程序,并不推荐使用多个无限循环实现多任务,一是因为这会让程序结构变得复杂,难以维护;此外无限循环的时间精度也不如run in parallel模块。
【SAMR21新玩法】11. 多任务
-
- 随机主题
- 回复总数
- 阅读次数
- 最新文章
-
- 1回复总数
- 2707 阅读次数
- 最新文章 由 shaoziyang
2019年 11月 11日 11:05
-
- 2回复总数
- 3337 阅读次数
- 最新文章 由 shaoziyang
2019年 11月 11日 12:23
-
- 1回复总数
- 2767 阅读次数
- 最新文章 由 shaoziyang
2019年 11月 11日 23:01