Arduino - 多线程库 SCoop 应用 并发处理任务_scoop延时-程序员宅基地

技术标签: Arduino  

是在一篇相关文章的基础上,做了相应的改编,原文做了一些改动,因为原文的 库文件下载地址失效了,我在 GitHub 找到了这个库的下载地址,有效的,在原文的基础上把下载地址换掉了。

正文:

使用该库的【任务】功能,首先要做三件事:

第一:引用库
include “SCoop.h”
【库文件下载地址】

https://link.jianshu.com/?t=https://github.com/fabriceo/SCoop

第二:setup函数里,调用mySCoop.start()命令
void setup() {
mySCoop.start();
}

第三:loop函数里,调用yield()命令
void loop() {
yield();
}


接下来就可以使用【任务】了。有两种定义方式,请继续往下看:

1、完整定义:定义【任务】的setup和loop两个函数。
定义一个名字为“TaskTest”的任务:
defineTask(TaskTest); //用defineTask定义一个任务,名为TaskTest
void TaskTest::setup() //定义该任务的setup()函数,用于初始化设置。
{
//这里是任务的setup函数的内容
}
void TaskTest::loop() //定义该任务的loop()函数,用于循环执行代码。
{
//这里是任务的loop函数的内容
}

2、快速定义:仅定义任务的loop函数
如果这个线程中执行的动作不需要初始化setup,只需要循环loop的话,可以直接使用defineTaskLoop()快速定义该线程任务,如下:
defineTaskLoop(TaskTest1)
{
//这里是任务的loop函数的内容
}

注意一点,使用此库之后,请使用sleep(ms)作为延时,不要用delay()了。
因为sleep(ms)只针对当前线程。而delay(ms)是针对全局的。

最后来一个完成的演示吧,2个LED分别以100毫秒和1秒的速度闪烁。12和13引脚分别接LED,然后运行代码看看效果吧。

#include "SCoop.h"
//完整定义
defineTask(TaskTest);
void TaskTest::setup()
{
    
  pinMode(13, OUTPUT);
}
void TaskTest::loop()
{
    
  digitalWrite(13, HIGH);
  sleep(1000);
  digitalWrite(13, LOW);
  sleep(1000);
}

//快速定义
defineTaskLoop(TaskTest1)
{
    
  digitalWrite(12, HIGH);
  sleep(100);
  digitalWrite(12, LOW);
  sleep(100);
}

void setup() {
    
  pinMode(12, OUTPUT);
  mySCoop.start();
}

void loop()
{
    
  yield();
}

最后想说一下,毕竟这个只是 arduino ,虽然这个可以实现并发处理,但最多只能支持两三个并发任务,再多就不行可能报错了,如果还想处理更多并发任务,推荐用 stm32

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wuli_dear_wang/article/details/80463369

智能推荐

mysql语句_mysql服务启动语句-程序员宅基地

文章浏览阅读218次。mysql语句启动mysql services.msc登录mysql -uroot -proot退出exitmysql 数据库操作数据库表格操作修改表删除表表-数据-增删改查条件查询 (复杂)连接查询(连表查询)子查询 (一个查询的结果作为另一个查询的一部分)启动mysql services.msc登录mysql -uroot -proot退出exitmysql 数据库操作登录mysql -uroot -prootquit/exit查看当前使用数据库: select database();_mysql服务启动语句

网址跳转重定向浏览器html,域名301重定向页面转跳的操作方法-巅云建站-程序员宅基地

文章浏览阅读1.3k次。当网站地址变更时,需要将旧域名301重定向到新的URL地址,实际上就是把旧地址的访问请求重新引导到新域名上。301永久重定向无论是对用户还是搜索引擎都是比较友好的,对SEO完全没有不好的一面。通过旧网站的关键词排名和PR等级都会传递给新网站,网站更换了域名,用域名301永久重定向的方式告诉搜索引擎本网页已经永久性转移到新的域名,避免搜索引擎无法找到页面,网站对于搜索引擎相对比较友好。域名重定向的好..._一个域名301重定向到另一个域名的url上

【软考-软件设计师精华知识点笔记】第八章 算法分析设计_软考决策树-程序员宅基地

文章浏览阅读1.4k次,点赞2次,收藏11次。【软考-软件设计师精华知识点笔记】第八章 算法分析设计_软考决策树

ubuntu怎么切换到root用户,切换到root账号方法_unbuntu切换到root用户-程序员宅基地

文章浏览阅读2.7w次,点赞28次,收藏169次。ubuntu怎么切换到root用户,使用su root命令,去切换到root权限,会提示输入密码,可是如何也输不对,提示“Authentication failure”或者是提示认证失败。该错误有两种情况一个是密码错了,另一种就是新安装好的Linux系统,暂时还没有给root设置密码。1、打开Ubuntu,输入命令:su root,回车提示输入密码,如何输入都不对。2、给root用户设置密码,命令“sudo passwd root ” 。 输入密码,并确认密码。3、重新输入命_unbuntu切换到root用户

精选2022年大厂高频Java面试真题集锦(含答案),面试一路开挂_java程序员大厂真题解析 作者图灵学院 周瑜-程序员宅基地

文章浏览阅读6.6k次。本文涵盖了阿里巴巴、腾讯、字节跳动、京东、华为等大厂的Java面试真题,不管你是要面试大厂还是普通的互联网公司,这些面试题对你肯定是有帮助的,毕竟大厂一定是行业的发展方向标杆,很多公司的面试官同样会研究大厂的面试题。与此同时,今年算法面试一定是会被问的,而算法不是光靠背面试题就有用的,它是需要数学逻辑思维的,因此,小编会在文末为大家准备一份非常优质的算法学习手册,重点在于学习思维方法,话不多说,直接开始上精选的大厂面试真题!1.JAVA 中的几种数据类型是什么,各自占用多少字节。2.String 类能被继承_java程序员大厂真题解析 作者图灵学院 周瑜

HTMLQQ跳转三方实现聊天功能_htmlqq聊天超链接-程序员宅基地

文章浏览阅读960次。众所周知,我们的网页右侧一般都有一个组件,那就联系QQ这个功能的实现就是一行代码解决QQ推广是不允许复制粘贴网页里的代码< a href="http://wpa.qq.com/msgrd?v=3&uin=1393882772&site=qq&menu=yes">联系客服</a>利用超链接实现跳转外部QQ链接在任何标签里边都可以实现此功能..._htmlqq聊天超链接

随便推点

【超分辨率(Super-Resolution)】关于【超分辨率重建】专栏的相关说明,包含专栏简介、专栏亮点、适配人群、相关说明、阅读顺序、超分理解、实现流程、研究方向、论文代码数据集汇总等-程序员宅基地

文章浏览阅读8.5k次,点赞54次,收藏23次。本专栏研究领域为【超分辨率重建】,涵盖图像超分、视频超分,实时超分,4K修复等方面。主要内容包括主流算法模型的论文精读、论文复现、毕业设计、涨点手段、调参技巧、论文写作、应用落地等方面。算法模型从SRCNN开始更新至今,一般是一篇论文精读对应一篇论文复现。论文精读详解理论,归化繁为简,归纳核心,积累词句,培养阅读论文和论文写作能力。论文复现依托Pytorch代码,实现完整的模型训练流程,总结调参方法,记录碰到的bug,论文插图可视化,培养读写代码能力、做实验的能力、以及应用落地能力。

python upload_module_转:使用 Nginx Upload Module 实现上传文件功能-程序员宅基地

文章浏览阅读327次。普通网站在实现文件上传功能的时候,一般是使用Python,Java等后端程序实现,比较麻烦。Nginx有一个Upload模块,可以非常简单的实现文件上传功能。此模块的原理是先把用户上传的文件保存到临时文件,然后在交由后台页面处理,并且把文件的原名,上传后的名称,文件类型,文件大小set到页面。下面和大家具体介绍一下。一、编译安装Nginx为了使用Nginx Upload Module,需要编译安装..._向nginx_upload_module服务器上传文件的python脚本

Python技能树丨Python简介-程序员宅基地

文章浏览阅读1k次,点赞15次,收藏30次。 作者主页:不吃西红柿****一、为什么要学Python短短 20 年间,**「计算机和互联网」**以一种前所未有的速度,改变了人类的生活 。我们使用微信 「交流」,使用淘宝 「购物」,使用搜索引擎 「获取信息」,随着 Uber、滴滴、美团的出现,甚至我们的出行、吃饭都越来越离不开互联网了。而这些改变,都来源于编程。如果说上个世纪是全球化的时代,掌握了英语,就能成为时代的宠儿;那么在 语义识别 和 人工智能 愈发成熟的今天,**「人和人的沟通」**不再是难题, 「人和计算机的沟通」 会显得越来越重要。我

[享学Ribbon] 三、Ribbon核心API源码解析:ribbon-core(二)IClientConfig配置详解_iclientconfig lai-程序员宅基地

文章浏览阅读2.5k次。配置对于一个程序到底有多重要自然不用多说,每个库均有它自己的配置管理方式,比如Spring有`Enviroment`抽象等。本文即将介绍的是Ribbon中一个使用频繁,且非常重要的接口:`IClientConfig`,它负责Ribbon的**配置管理**,包括所有默认值的维护,以及提供提供其读写能力。_iclientconfig lai

Matlab中dir函数使用小技巧_matlab dir函数用法-程序员宅基地

文章浏览阅读9.5k次,点赞11次,收藏66次。想必很多小伙伴在matlab中对文件进行批处理时经常会使用dir函数吧,dir函数用于列出文件夹中的内容。使用语法如下:% Matlabdir % 列出当前文件夹中的文件和文件夹,当然调用方式也可以是listing = dirdir name % 列出当前文件夹中与name同名的文件和文件夹,不支持调用方式listing = dir namelisting = dir(name) % 列出当前文件夹中与name同名的文件和文件夹当_matlab dir函数用法

zeromq java 教程,如何使用Java运行ZeroMQ?-程序员宅基地

文章浏览阅读228次。I'm having an issue running ZeroMQ with Java using Eclipse and Windows XP. I've successfully installed [I think] the 0MQ libraries as well as the Java bindings. The instructions I used to do that are ..._zeromq java

推荐文章

热门文章

相关标签