欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Arduino学习记录(1) : 简单多线程

程序员文章站 2022-07-08 15:58:22
Arduino学习记录1:简单多线程UPCer-小逆Arduino学习记录文章目录Arduino学习记录1:简单多线程前言一、Scoop库下载二、Ardiuino IDE添加库三、使用步骤1.引入库2.读入数据总结前言遇到这样一道题目,需要多线程来实现,在网上找好久程序调度相关内容发现都太过麻烦,直到看到了这篇文章https://blog.csdn.net/qq_39591322/article/details/89952869其中的使用Scoop库实现多线程简单好用一、Scoop库下载...

记录小逆学习中的各种踩坑



前言

遇到这样一道题目,需要多线程来实现,在网上找好久程序调度相关内容发现都太过麻烦,直到看到了这篇文章
Arduino的多线程
其中的使用Scoop库实现多线程简单易用
Arduino学习记录(1) : 简单多线程

一. Scoop库下载

GitHub下载地址: Scoop 库

二. Ardiuino IDE添加库

解压下载的压缩包,将解压出的Scoop文件夹拷贝到Arduino IDE安装目录中的libraries文件夹中Arduino学习记录(1) : 简单多线程
再打开Arduino IDE菜单>项目>加载库中即可看到Scoop库已添加Arduino学习记录(1) : 简单多线程

三. 使用步骤

完整定义:

#include <SCoop.h>//引入头文件

void setup() {
  mySCoop.start();//调用mySCoop多线程服务
}

void loop()
{
  yield();//调用yield函数运行多线程程序
}


defineTask(Task1);//定义线程一

void Task1::setup()//线程一的初始化setup
{
pinMode(13, OUTPUT);
}

void Task1::loop()//线程一的死循环loop
{
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}

快速定义:

#include <SCoop.h>//引入头文件

void setup() {
mySCoop.start();
pinMode(13, OUTPUT);//设置引脚13为输出模式
}

void loop()
{
yield();
}


defineTaskLoop(Task1)//快速定义线程一,省去Tasksetup,但需先在setup中开端口
{
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}

四. 完整代码

#include <SCoop.h>
void setup() {
mySCoop.start();
pinMode(8,OUTPUT);
pinMode(6,OUTPUT);
pinMode(5,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
}

defineTaskLoop(Task1)
{
  int a=random(500,2001);//实现每次闪烁周期不同
  digitalWrite(8, HIGH);
  delay(a);
  digitalWrite(8, LOW);
  delay(a);
}
defineTaskLoop(Task2)
{
  int b=random(500,2001);
  digitalWrite(6, HIGH);
  delay(b);
  digitalWrite(6, LOW);
  delay(b);
}
defineTaskLoop(Task3)
{
  int c=random(500,2001);
  digitalWrite(5, HIGH);
  delay(c);
  digitalWrite(5, LOW);
  delay(c);
}
defineTaskLoop(Task4)
{
  int d=random(500,2001);
  digitalWrite(9, HIGH);
  delay(d);
  digitalWrite(9, LOW);
  delay(d);
}
defineTaskLoop(Task5)
{
  int e=random(500,2001);
  digitalWrite(10, HIGH);
  delay(e);
  digitalWrite(10, LOW);
  delay(e);
}
void loop() {
  yield();
}

总结

arduino处理多任务能力有限,虽然通过这个可以实现多任务并发处理,但最多只能支持四五个并发任务,再多就会出现内存不足报错了,若要处理更多并发任务,推荐用stm32。

本文地址:https://blog.csdn.net/qq_44626962/article/details/109485066