1. 程式人生 > >多執行緒庫SCoop應用 之 任務

多執行緒庫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(); }