本文来源电子发烧友社区,作者: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文章
103浏览量
18174 -
开发板试用
+关注
关注
3文章
301浏览量
2095
发布评论请先 登录
相关推荐
全志T113-S3开发板网络通信

有奖丨米尔 全志T536开发板免费试用

如何用OpenCV进行手势识别--基于米尔全志T527开发板

FacenetPytorch人脸识别方案--基于米尔全志T527开发板

【米尔-Xilinx XC7A100T FPGA开发板试用】+01.开箱(zmj)
搭载全志T527芯片的AvaotaA1开发板

Andes晶心科技推出QiLai系统芯片和Voyager开发板
【米尔-全志T113-i开发板试用】米尔-全志T113-i开发板与modbus设备的连接和操作
SO14;SMD卷轴包,13“;Q1/T1产品定位包装信息

HSOP8;用于SMD的卷筒干式包装,13“;Q1/T1产品方向包装信息

X2SON5;SMD卷轴包,7“;Q1/T1产品定位包装信息

双向可控硅导通问题,去掉触发信号,T1,T2极也断开了
学习笔记分享|使用C库函数控制ELF 1开发板的LED

评论