Arduino - 多線程庫SCoop應用 之 時鐘(計時器)

使用該庫的【時鐘(又叫:計時器)】功能,首先要做三件事:

第一:引用庫
#include “SCoop.h”
【庫文件下載地址】
http://www.dfrobot.com.cn/community/forum.php?mod=attachment&aid=MTI4MzZ8MWFmMjk1MGF8MTQ1MDcwNTA2M3wwfD

第二:setup函數裏,調用mySCoop.start()命令
void setup() {
mySCoop.start();
}

第三:loop函數裏,調用yield()命令
void loop() {
yield();
}

接下來就可以使用【時鐘】了。有兩種定義方式,請繼續往下看:
1、完整定義:定義線程的【setup】和【run】兩個函數。
定義一個名字爲“Tmr”的時鐘:
defineTimer(Tmr,1000); //用defineTimer定義一個時鐘,名爲Tmr,週期爲1000ms
void Tmr::setup() //定義該時鐘的setup()函數,用於初始化設置。
{
//這裏是時鐘的setup函數的內容
}
void Tmr::run() //定義該時鐘的run()函數,用於執行週期事件。
{
//這裏是時鐘的run函數的內容
}

2、快速定義:僅定義時鐘的run函數
如果這個時鐘不需要初始化setup,只需要週期事件run的話,可以直接使用defineTimerRun()快速定義該線程任務,如下:
defineTimerRun(Tmr,1000) //用defineTimerRun定義一個時鐘,名爲Tmr,週期爲1000ms
{
//小技巧,如果某條件下,此時暫不需要執行週期事件,只需要在第一句返回,return 即可。可以用全局變量作爲參考,從程序外部進行控制。
//這裏是時鐘的run函數的內容
//小技巧:如果此時需要動態修改時鐘週期,只需要 schedule(新週期) 即可。可以用全局變量作爲參考,從程序外部進行控制。
}

注意一點,使用此庫之後,請使用sleep(ms)作爲延時,不要用delay()了。
因爲sleep(ms)只針對當前線程。而delay(ms)是針對全局的。

代碼就不寫了,參考 【Arduino - 多線程庫SCoop應用 之 任務】。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章