【arduino多线程编程】arduino竟然还能多线程编程?确定不进来夸一下嘛......
目录
1.SCoop库下载
2.多线程简介
3.多线程实现LED闪烁+计时
4.总结
1.SCoop库下载
【点击这里】提取码:u7r5。下载SCoop库,解压后放在arduino安装目录下的
libraries文件夹下即可。
2.多线程简介
看了上一篇《arduino面向对象编程》是不是感觉arduino已经到极限了?NO,NO,NO,arduino远远不止如此,不信你往下看:
理解了单线程就很容易理解多线程了吧,举个例子,假设有语文作文和数学试卷两个任务等你完成,那你肯定只能先完成一个,再完成另一个,这样虽不准确但很明确的理解单线程;往往单线程是很不实用的,太占用时间;而复杂系统例如操作系统肯定不可能一件事一件事来执行,而往往是并发同时执行多个任务。
arduino多线程是依托于SCoop库来实现的(当然还有其他库可以实现,这里使用更为简便的SCoop库);大致过程分为以下:
1.包含SCoop库头文件; 2.创建任务; 3.执行
包含头文件一句#include的事不必多讲,执行是在主setup()函数中声明以下代码:
void setup() { mySCoop.start(); }
有点类似于python的多线程;然后在loop()里这样写:
void loop() { yield(); }
可以参照python的生成器,你就理解成:你写了多少个任务就给我生成多少个线程;
重点是如何写任务,这里有两种方法,学名叫什么完整写法,快速写法,我是觉得没多发必要去记这个,会用就行:
怎么区分呢:如果你这个任务里需要用到setup()函数就用style1(完整写法);否则用style2:
完整代码:
#include<SCoop.h> int count=0; //style1 defineTask(led)//创建一个名为led的任务 void led::setup(){pinMode(13,OUTPUT);} void led::loop(){digitalWrite(13,!digitalRead(13));sleep(1000);} //style2 defineTaskLoop(cnt){Serial.println(count++);sleep(1000);} void setup() { Serial.begin(9600); mySCoop.start(); } void loop() { yield(); }
实验现象:
实验现象为LED间隔1s(SCoop库中的sleep()函数实现,以后细讲)闪烁同时串口间隔1s输出数字;LED闪烁就请自行动手试验了,串口输出计数如下图:
虽然说是多线程并发,但实际上任务多了还可能会出现问题(arduino板子的性能决定),但是看到这里就不应该再小看arduino了吧,这里只用到了SCoop库,但实际上arduino的库是真滴多,有兴趣可以自己去了解了解。
欢迎关注【菜小涛的CSDN】,这是一个有料、有趣的地方。
- 点赞 7
- 收藏
- 分享
- 文章举报
- linux 学习- 编程基础之多线程编程(创建多线程)
- Linux多线程编程(一)---多线程基本编程
- 5天玩转C#并行和多线程编程 —— 第五天 多线程编程大总结
- Java多线程编程(八)-并发编程原理(Java多线程开发技巧)
- 【开放 5月22日 编程实践 内含资料】 找出考试第三名的成绩, 你可以么? _______周末放松一下,进来学习学习吧!
- 5天玩转C#并行和多线程编程 —— 第五天 多线程编程大总结
- Socket多线程编程 serversocket服务器多线程编程
- Solaris2.4 多线程编程指南2--用多线程编程
- Java多线程编程(一)-多线程编程设计要点
- 编程大视界:史上最全的计算机编程语言列表来了!你不进来了解一下吗?
- 5天玩转C#并行和多线程编程 —— 第五天 多线程编程大总结
- .NET多线程编程(7)——C#多线程编程传递参数解决方案
- 【聊天室】怎样做才能跟喜欢的人确定关系?都进来学习一下!
- 能不能简单描述一下你在java web开发中需要用到多线程编程的场景?
- WPF、WinForm(C#)多线程编程并更新界面(UI)(转载积累)
- Java socket编程(单线程socket,多线程socket)
- Java 多线程 并发编程
- Linux并发服务器编程之多线程并发服务器
- Android多线程编程之newSingleThreadExecutor
- 多线程编程4 - GCD