本文來(lái)源電子發(fā)燒友社區(qū),作者:ankor, 帖子地址:https://bbs.elecfans.com/jishu_2292363_1_1.html
corvette T1多任務(wù)調(diào)度學(xué)習(xí)
本文嘗試實(shí)現(xiàn)corvette T1開(kāi)發(fā)板的多任務(wù)協(xié)作功能
多任務(wù)協(xié)作功能可以使用freeRTOS、RT-thread一類實(shí)時(shí)操作系統(tǒng)實(shí)現(xiàn),也可以使用中斷、任務(wù)調(diào)度器來(lái)實(shí)現(xiàn)這些功能在arduino中也都支持,因?yàn)椴⒉磺宄1開(kāi)發(fā)板支不支持實(shí)時(shí)操作系統(tǒng)所以本次暫不采用實(shí)時(shí)操作系統(tǒng)來(lái)實(shí)現(xiàn)(英文太差,不太看的懂手冊(cè)QAQ,而且說(shuō)明文檔好像也沒(méi)提這事?)。
最后我選擇了任務(wù)調(diào)度器來(lái)實(shí)現(xiàn)T1開(kāi)發(fā)板下的多任務(wù)調(diào)度,主要用到TaskScheduler這個(gè)庫(kù),在管理庫(kù)中搜索并安裝即可。

先演示下其中的示例,打開(kāi)個(gè)庫(kù)中的Scheduler_example00_Blink這個(gè)示例,操作步驟:文件→示例→TaskScheduler→Scheduler_example00_Blink,如下圖。

修改LED_BUILTON為13
?
修改前
修改后
然后上傳即可看到開(kāi)頭視頻中的演示效果了。
多任務(wù)調(diào)度學(xué)習(xí)
然后又跟下面這位大佬的教程學(xué)習(xí)了多任務(wù)調(diào)度的操作(其實(shí)主要是學(xué)明白他的操作,自己還是太菜了QAQ)
(42條消息) Arduino|實(shí)現(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ù)對(duì)象,內(nèi)部參數(shù)為延遲時(shí)間,任務(wù)生存時(shí)間(s),任務(wù)的回調(diào)函數(shù)地址
Task t2(3000, TASK_FOREVER, &t2Callback);//回調(diào)函數(shù)主要是實(shí)現(xiàn)任務(wù)功能的 Task t3(5000, TASK_FOREVER, &t3Callback);
然后是調(diào)度器的創(chuàng)建,主要負(fù)責(zé)收納、執(zhí)行和刪除這些任務(wù)的
Scheduler runner;
然后根據(jù)對(duì)象runner區(qū)訪問(wèn)類的成員函數(shù)
runner.init();
runner.addTask(name);//添加name任務(wù),name為上面的Task 如t1或t2或t3 runner.deleteTask(name); runner.execute();
更多的細(xì)節(jié)可以參考上面那篇文章,最后是T1開(kāi)發(fā)板使用該文提供的代碼跑出來(lái)的效果。
// 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文章
123瀏覽量
19173 -
開(kāi)發(fā)板試用
+關(guān)注
關(guān)注
3文章
303瀏覽量
2786
發(fā)布評(píng)論請(qǐng)先 登錄
ZL30100 T1/E1系統(tǒng)同步器:功能特性與應(yīng)用解析
MAX4670:T1/E1/J1線路冗余保護(hù)的理想之選
RZ/T1 Group:高性能MCU的技術(shù)解析與應(yīng)用洞察
深度解析DS26503 T1/E1/J1 BITS元素:功能、特性與應(yīng)用
有獎(jiǎng)丨米爾全志 T153 MINI開(kāi)發(fā)板免費(fèi)試用來(lái)啦
Renesas RX66T 開(kāi)發(fā)板:功能、配置與使用指南
Renesas FPB - RA2T1快速原型開(kāi)發(fā)板:開(kāi)啟高效設(shè)計(jì)之旅
ADI T1/E1/J1收發(fā)器的環(huán)回功能
fpga開(kāi)發(fā)板 璞致Artix-7系列之PA-Starlite Artix7 A735T 75T 100T 200T開(kāi)發(fā)板用戶手冊(cè)-學(xué)習(xí)板
車載電器EMC整改:T1到T3供應(yīng)商,智能化解決方案助你
【作品合集】合眾HZ-T536開(kāi)發(fā)板測(cè)評(píng)
【HZ-T536開(kāi)發(fā)板免費(fèi)體驗(yàn)】開(kāi)箱評(píng)測(cè)
基于米爾全志T536開(kāi)發(fā)板的多協(xié)議物聯(lián)網(wǎng)關(guān)的方案測(cè)試
【RA4L1-SENSOR】+ RA4L1-SENSOR開(kāi)發(fā)板之讀取RA4L1 Sensor開(kāi)發(fā)板芯片溫度
【評(píng)測(cè)試用】合眾HZ-T536開(kāi)發(fā)板免費(fèi)試用體驗(yàn)
【晶心科技ADP-Corvette-T1開(kāi)發(fā)板試用體驗(yàn)】corvette T1的多任務(wù)調(diào)度學(xué)習(xí)
評(píng)論