Протопоточность / Многопоточность на Arduino Uno - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь использовать протопотоки на Arduino Uno.Я слежу за 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?

2) Мне нужно прочитать данные с нескольких датчиков и обработать их отдельно.Так как Arduino не поддерживает многопоточность на аппаратном уровне, я сделал еще одну реализацию для обхода массива указателей функций с таймером.Этот подход такой же, как протопоточность?

1 Ответ

0 голосов
/ 23 мая 2019

Упомянутое вами руководство предназначено для ESP32, ядро ​​которого отличается от ядра Arduino, чем само Arduino Uno. В первую очередь он содержит FreeRTOS, который предоставляет базовые механизмы для этой библиотеки. Он не будет работать с Arduino Uno как есть.

Я считаю, что вам не нужно многопоточность для вашего приложения. Вы можете просто просмотреть показания датчика и обработать его в конце цикла. Шагом к параллелизму будет использование простого планировщика .

...