C语言 Arduino Uno上的Protothreading/多线程

rekjcdws  于 2023-06-21  发布在  其他
关注(0)|答案(2)|浏览(150)

我试图在Arduino Uno上使用protothreads。我是https://techtutorialsx.com/2017/12/30/esp32-arduino-using-the-pthreads-library/
我已经下载了pthread. h头文件,并将其放在与.ino文件相同的目录中。
我已经将教程中的#include语句更改为#include“pthread.h”,因为该文件与我的.ino文件位于同一目录中。
我得到以下错误:

Protothreading_example:11:4: error: 'pthread_t' was not declared in this scope
    pthread_t threads[4];
    ^
Protothreading_example:16:37: error: 'threads' was not declared in this scope
       returnValue = pthread_create(&threads[i], NULL, printThreadId, (void *)i);
                                     ^
Protothreading_example:16:79: error: 'pthread_create' was not declared in this scope
       returnValue = pthread_create(&threads[i], NULL, printThreadId, (void *)i);
                                                                               ^
exit status 1
'pthread_t' was not declared in this scope

我有两个跟进问题:

**1)**Arduino上有更好的protothreading教程源吗?
**2)**我需要从多个传感器读取数据并单独处理。由于Arduino在硬件级别不支持多线程,我做了另一个实现,通过一个计时器循环通过一个函数指针数组。这种方法与原型线程相同吗?

sauutmhj

sauutmhj1#

你提到的教程是针对ESP32的,它的Arduino内核与Arduino Uno本身不同。它主要包含FreeRTOS,它为这个库提供了底层机制。它不会像Arduino Uno那样工作。
我相信您的应用程序不需要多线程。你可以循环通过传感器读数,并在循环结束时处理它。向并发性迈进的一步是使用simple scheduler

brjng4g3

brjng4g32#

您可以使用Arduino_FreeRTOS库来创建可以并发运行的多个任务。我不称之为线程的原因是RTOS使用的术语是任务。ESP-IDE还具有在FreeRTOS上编写的线程 Package 器,您可以轻松使用FreeRTOS的原始API来实现您想要的功能。

相关问题