【晶心科技ADP-Corvette-T1开发板试用体验】corvette T1的多任务调度学习

描述

本文来源电子发烧友社区,作者: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开发板使用该文提供的代码跑出来的效果。


 
#include

// 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("t1: enabled t3 and added to the chain"); } if (t1.isLastIteration()) { t3.disable(); runner.deleteTask(t3); t2.setInterval(500); Serial.println("t1: disable t3 and delete it from the chain. t2 interval set to 500"); }

}

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(); }

 

 

示例展示

晶心科技

以上便是本文的所有内容了

谢谢阅读。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分