Arduino - 多线程库 SCoop 应用 并发处理任务

原文:https://blog.csdn.net/wuli_dear_wang/article/details/77994377
相比原文做了一些改动,因为原文的 库文件下载地址失效了,我在 GitHub 找到了这个库的下载地址,有效的,在原文的基础上把下载地址换掉了。

正文:



使用该库的【任务】功能,首先要做三件事:

第一:引用库
include “SCoop.h”
【库文件下载地址】
https://link.jianshu.com/?t=https://github.com/fabriceo/SCoop

第二:setup函数里,调用mySCoop.start()命令
void setup() {
mySCoop.start();
}

第三:loop函数里,调用yield()命令
void loop() {
yield();
}


接下来就可以使用【任务】了。有两种定义方式,请继续往下看:

1、完整定义:定义【任务】的setup和loop两个函数。
定义一个名字为“TaskTest”的任务:
defineTask(TaskTest); //用defineTask定义一个任务,名为TaskTest
void TaskTest::setup() //定义该任务的setup()函数,用于初始化设置。
{
//这里是任务的setup函数的内容
}
void TaskTest::loop() //定义该任务的loop()函数,用于循环执行代码。
{
//这里是任务的loop函数的内容
}

2、快速定义:仅定义任务的loop函数
如果这个线程中执行的动作不需要初始化setup,只需要循环loop的话,可以直接使用defineTaskLoop()快速定义该线程任务,如下:
defineTaskLoop(TaskTest1)
{
//这里是任务的loop函数的内容
}

注意一点,使用此库之后,请使用sleep(ms)作为延时,不要用delay()了。
因为sleep(ms)只针对当前线程。而delay(ms)是针对全局的。

最后来一个完成的演示吧,2个LED分别以100毫秒和1秒的速度闪烁。12和13引脚分别接LED,然后运行代码看看效果吧。

#include "SCoop.h"
//完整定义
defineTask(TaskTest);
void TaskTest::setup()
{
  pinMode(13, OUTPUT);
}
void TaskTest::loop()
{
  digitalWrite(13, HIGH);
  sleep(1000);
  digitalWrite(13, LOW);
  sleep(1000);
}

//快速定义
defineTaskLoop(TaskTest1)
{
  digitalWrite(12, HIGH);
  sleep(100);
  digitalWrite(12, LOW);
  sleep(100);
}

void setup() {
  pinMode(12, OUTPUT);
  mySCoop.start();
}

void loop()
{
  yield();
}


使用该库的【任务】功能,首先要做三件事:

猜你喜欢

转载自blog.csdn.net/wuli_dear_wang/article/details/80463369