本文來源電子發燒友社區,作者:ankor, 帖子地址:https://bbs.elecfans.com/jishu_2292363_1_1.html
corvette T1多任務調度學習
本文嘗試實現corvette T1開發板的多任務協作功能
多任務協作功能可以使用freeRTOS、RT-thread一類實時操作系統實現,也可以使用中斷、任務調度器來實現這些功能在arduino中也都支持,因為并不清楚T1開發板支不支持實時操作系統所以本次暫不采用實時操作系統來實現(英文太差,不太看的懂手冊QAQ,而且說明文檔好像也沒提這事?)。
最后我選擇了任務調度器來實現T1開發板下的多任務調度,主要用到TaskScheduler這個庫,在管理庫中搜索并安裝即可。
先演示下其中的示例,打開個庫中的Scheduler_example00_Blink這個示例,操作步驟:文件→示例→TaskScheduler→Scheduler_example00_Blink,如下圖。
修改LED_BUILTON為13
?
修改前
修改后
然后上傳即可看到開頭視頻中的演示效果了。
多任務調度學習
然后又跟下面這位大佬的教程學習了多任務調度的操作(其實主要是學明白他的操作,自己還是太菜了QAQ)
(42條消息) Arduino|實現多任務操作,從此告別果奔6柒的博客-CSDN博客arduino多任務并行
首先是聲明自己的回調函數
void t1Callback();
void t2Callback(); void t3Callback();
然后創建任務也就是Task的創建
Task t1(2000, 10, &t1Callback);//創建任務對象,內部參數為延遲時間,任務生存時間(s),任務的回調函數地址
Task t2(3000, TASK_FOREVER, &t2Callback);//回調函數主要是實現任務功能的 Task t3(5000, TASK_FOREVER, &t3Callback);
然后是調度器的創建,主要負責收納、執行和刪除這些任務的
Scheduler runner;
然后根據對象runner區訪問類的成員函數
runner.init();
runner.addTask(name);//添加name任務,name為上面的Task 如t1或t2或t3 runner.deleteTask(name); runner.execute();
更多的細節可以參考上面那篇文章,最后是T1開發板使用該文提供的代碼跑出來的效果。
// Callback methods prototypes void t1Callback(); void t2Callback(); void t3Callback();
//Tasks (delay_ms,times,func) Task t4(); Task t1(2000, 10, &t1Callback); Task t2(3000, TASK_FOREVER, &t2Callback); Task t3(5000, TASK_FOREVER, &t3Callback);
Scheduler runner;
void t1Callback() { Serial.print("t1: "); Serial.println(millis());
if (t1.isFirstIteration()) { runner.addTask(t3); t3.enable(); Serial.println(34;t1: enabled t3 and added to the chain34;); } if (t1.isLastIteration()) { t3.disable(); runner.deleteTask(t3); t2.setInterval(500); Serial.println(34;t1: disable t3 and delete it from the chain. t2 interval set to 50034;); }
}
void t2Callback() { Serial.print("t2: "); Serial.println(millis());
}
void t3Callback() { Serial.print("t3: "); Serial.println(millis());
}
void setup () { Serial.begin(115200); Serial.println("Scheduler TEST");
runner.init(); Serial.println("Initialized scheduler");
runner.addTask(t1); Serial.println("added t1");
runner.addTask(t2); Serial.println("added t2");
t1.enable(); Serial.println("Enabled t1"); t2.enable(); Serial.println("Enabled t2"); }
void loop () { runner.execute(); }
示例展示
以上便是本文的所有內容了
謝謝閱讀。
-
晶心科技
+關注
關注
0文章
97瀏覽量
18150 -
開發板試用
+關注
關注
3文章
301瀏覽量
2040
發布評論請先 登錄
相關推薦
評論