本文來源電子發(fā)燒友社區(qū),作者:ankor, 帖子地址:https://bbs.elecfans.com/jishu_2292363_1_1.html
corvette T1多任務(wù)調(diào)度學習
本文嘗試實現(xiàn)corvette T1開發(fā)板的多任務(wù)協(xié)作功能
多任務(wù)協(xié)作功能可以使用freeRTOS、RT-thread一類實時操作系統(tǒng)實現(xiàn),也可以使用中斷、任務(wù)調(diào)度器來實現(xiàn)這些功能在arduino中也都支持,因為并不清楚T1開發(fā)板支不支持實時操作系統(tǒng)所以本次暫不采用實時操作系統(tǒng)來實現(xiàn)(英文太差,不太看的懂手冊QAQ,而且說明文檔好像也沒提這事?)。
最后我選擇了任務(wù)調(diào)度器來實現(xiàn)T1開發(fā)板下的多任務(wù)調(diào)度,主要用到TaskScheduler這個庫,在管理庫中搜索并安裝即可。
先演示下其中的示例,打開個庫中的Scheduler_example00_Blink這個示例,操作步驟:文件→示例→TaskScheduler→Scheduler_example00_Blink,如下圖。
修改LED_BUILTON為13
?
修改前
修改后
然后上傳即可看到開頭視頻中的演示效果了。
多任務(wù)調(diào)度學習
然后又跟下面這位大佬的教程學習了多任務(wù)調(diào)度的操作(其實主要是學明白他的操作,自己還是太菜了QAQ)
(42條消息) Arduino|實現(xiàn)多任務(wù)操作,從此告別果奔6柒的博客-CSDN博客arduino多任務(wù)并行
首先是聲明自己的回調(diào)函數(shù)
void t1Callback();
void t2Callback(); void t3Callback();
然后創(chuàng)建任務(wù)也就是Task的創(chuàng)建
Task t1(2000, 10, &t1Callback);//創(chuàng)建任務(wù)對象,內(nèi)部參數(shù)為延遲時間,任務(wù)生存時間(s),任務(wù)的回調(diào)函數(shù)地址
Task t2(3000, TASK_FOREVER, &t2Callback);//回調(diào)函數(shù)主要是實現(xiàn)任務(wù)功能的 Task t3(5000, TASK_FOREVER, &t3Callback);
然后是調(diào)度器的創(chuàng)建,主要負責收納、執(zhí)行和刪除這些任務(wù)的
Scheduler runner;
然后根據(jù)對象runner區(qū)訪問類的成員函數(shù)
runner.init();
runner.addTask(name);//添加name任務(wù),name為上面的Task 如t1或t2或t3 runner.deleteTask(name); runner.execute();
更多的細節(jié)可以參考上面那篇文章,最后是T1開發(fā)板使用該文提供的代碼跑出來的效果。
// 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(); }
示例展示
以上便是本文的所有內(nèi)容了
謝謝閱讀。
-
晶心科技
+關(guān)注
關(guān)注
0文章
111瀏覽量
18599 -
開發(fā)板試用
+關(guān)注
關(guān)注
3文章
302瀏覽量
2400
發(fā)布評論請先 登錄
【HZ-T536開發(fā)板免費體驗】開箱評測
基于米爾全志T536開發(fā)板的多協(xié)議物聯(lián)網(wǎng)關(guān)的方案測試

【RA4L1-SENSOR】+ RA4L1-SENSOR開發(fā)板之讀取RA4L1 Sensor開發(fā)板芯片溫度
基于米爾全志T536開發(fā)板的視頻識別應用方案

【米爾-全志T536開發(fā)板試用體驗】 試用測評報-初識T536
OpenCV行人檢測應用方案--基于米爾全志T527開發(fā)板

騰訊元寶升級:深度思考模型“騰訊混元T1”全量上線
HTSSOP8;用于SMD的卷軸包,13英寸;Q1/T1產(chǎn)品定位

有獎丨米爾 全志T536開發(fā)板免費試用

如何用OpenCV進行手勢識別--基于米爾全志T527開發(fā)板

評論