Arduino多线程SCoop库

我用了一块多年前存在手里的nano板子,也是个初次使用arduino,想着能不能用用多线程,查到一篇 Arduino的多线程_TEST_PROGRAM_NONE-CSDN博客_arduino 多线程,于是我决定下载最后的SCoop来试试,现在记录一下遇到过的问题

1、安装,如引用所说,下载GitHub - Varsion/SCoop-Arduino: Arduino多线程

主要要用到的是SCoop这个文件夹下的东西

 将SCoop这个文件夹拷贝到libraries文件夹下

重启一下工程,添加#include <SCoop.h>,编译,然后报错,如下

搜索到了`timer0_overflow_count' referenced in section `.text' of ... defined in discarded section `.text' of wiring.c.o (symbol from plugin) · Issue #4 · fabriceo/SCoop · GitHub

该错误的大概意思是:

现在这个新的Arduino IDE中的编译器不再保留‘timer0overovercount’变量了。

解决方法是,双击错误信息,跳转到SCoop.cpp的227行

在上边找到184行,在184和185之间添加一行,强制编译器认为这个量可用

extern volatile unsigned long timer0_overflow_count; // use this variable which is incremented at each overflow
static unsigned long tell_compiler_that_i_really_need_this = timer0_overflow_count; // ADD THIS LINE - ugly hack to force the compiler to REALLY keep timer0_overflow_count
static inline micros_t SCoopMicros16(void) __attribute__((always_inline));

然后就能编译通过了。

 

 

 

 

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Arduino进行多线程编程时,可以使用SCoop来实现并发执行的任务。以下是一个简单的SCoopArduino多线程示例: ```cpp #include <SCoop.h> // 定义任务1 void task1() { while (true) { // 执行任务1的操作 // ... delay(1000); // 可以添加适当的延迟 } } // 定义任务2 void task2() { while (true) { // 执行任务2的操作 // ... delay(2000); // 可以添加适当的延迟 } } // 初始化SCoop SCOOP coop; void setup() { // 添加任务到SCoop coop.addTask(task1); coop.addTask(task2); // 启动SCoop coop.start(); } void loop() { // 在loop()函数中不需要编写任何代码 // SCoop会自动调度任务执行 } ``` 这个示例代码中,我们定义了两个任务 `task1` 和 `task2`,分别在其中执行各自的操作。在 `setup()` 函数中,我们将这两个任务添加SCoop中,并调用 `coop.start()` 启动SCoop。在 `loop()` 函数中,不需要编写任何代码,SCoop会自动调度任务执行。 注意事项: 1. 在编写多线程程序时,要确保每个任务都是非阻塞的。避免使用 `delay()` 或其他会造成阻塞的操作,以免影响其他任务的执行。 2. 如果任务需要共享数据,要注意使用适当的同步机制,例如互斥锁 (Mutex) 或信号量 (Semaphore),以避免数据竞争或不一致的情况发生。 3. 根据Arduino的资源限制,尽量控制任务数量和任务执行的频率,以免耗尽Arduino的处理能力或内存。 4. 使用SCoop时,要确保你的Arduino板支持硬件定时器中断,因为SCoop依赖于硬件定时器来进行任务调度。 以上是一个简单的SCoopArduino多线程示例和注意事项。你可以根据具体需求和实际情况进行扩展和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值