【SAMR21新玩法】11. 多任务

Adafruit CircuitPython相关
MicroPython重要分支
回复
头像
shaoziyang
帖子: 3954
注册时间: 2019年 10月 21日 13:48

【SAMR21新玩法】11. 多任务

#1

帖子 shaoziyang »

多任务是现代嵌入式系统的一个特点,从小容量的8位单片机,到32位arm,以至更复杂的控制器,都支持多任务功能。资源少的单片机只能通过时间片方式分时运行多任务,而多核MCU可以同时并行多个任务。

在makecode中,也支持多任务功能。在软件中它被叫做“run in parallel”(并行运行)。run in parallel的使用方法和我们常见的RTOS非常相似,需要在它内部放入一个无限循环,将需要执行的任务放在循环中。此外还要放置暂停模块,这样任务之间才能切换。一个典型的多任务程序结构如下:

R21-13.jpg
R21-13.jpg (29.14 KiB) 查看 3328 次

在makecode中,多任务的使用也很容易,将它放在初始化(on start)就可以了。如果有多个任务,就依次加到初始化部分。下面是一个基本的多任务程序,主循环(任务1)中每500ms打印一个不断递增的变量y,任务2中每秒打印0-10随机数,任务3显示一个呼吸灯。

R21-14.jpg
R21-14.jpg (57.17 KiB) 查看 3328 次

在线版本https://makecode.com/_3Do4v8MiPCcR

MakeCode的多任务可以看成是一个非占先式的、无优先级、时间片轮询的RTOS,一个任务执行后,通过暂停模块切换到其它任务,因此暂停模块是必须使用的,否则会停在一个任务中,无法执行其它任务。无限循环(forover)也是一个特殊的任务,它不需要在加入循环模块和暂停模块,因为无限循环模块中已经内置了这些功能。

一个程序中可以包含多个无限循环,利用无限循环实现多任务。不过对于复杂的程序,并不推荐使用多个无限循环实现多任务,一是因为这会让程序结构变得复杂,难以维护;此外无限循环的时间精度也不如run in parallel模块。

回复

  • 随机主题
    回复总数
    阅读次数
    最新文章