Поддерживаются ли потоки (или pthreads) на устройствах без операционной системы. Я использую компилятор ARM/GNU C++(arm-none-eabi-g++) и получаю сообщение об ошибке не могу найти -lpthread при компиляции, хотя я указал флаг -lpthread в команде компоновщика.
Потоки на встроенных устройствах без ПО
Ответы (2)
Без операционной системы, которая поддерживает вытесняющую многозадачность, у вас нет потоков. Это то, к чему относится термин «голый металл».
Ни g++, ни компоновщик не могут предоставить вам функциональность потока. Только операционная система может предоставлять потоки.
Конечно, вы можете создать собственную обработку потоков в своем собственном приложении на «голом железе», но это серьезная задача.
Подпрограммы прерывания обычно вытесняют основную программу на устройствах с «голым железом» и могут рассматриваться как периодически запускаемые потоки. И периодическое прерывание таймера может использоваться для переключения контекстов потока. Это первый шаг к вытесняющей многозадачности операционной системы.
Если вам не нужны на самом деле pthreads (просто вы не знали о других методах), то сопрограммы могут быть решением для вас.
A coroutine is a function that can suspend execution to be resumed later. Coroutines are stackless: they suspend execution by returning to the caller and the data that is required to resume execution is stored separately from the stack. This allows for sequential code that executes asynchronously (e.g. to handle non-blocking I/O without explicit callbacks), and also supports algorithms on lazy-computed infinite sequences and other uses.
https://en.cppreference.com/w/cpp/language/coroutines
Проще говоря, это нечто среднее между функциями и потоками. Вам не нужно ждать, пока они закончат выполнение, как обычные функции, и не нужно быть частью ОС (FreeRTOS — это ОС), чтобы иметь функцию потока (pthread или другого).
Это новая функция C++20, которую вы могли бы поддерживать в своей встроенной цепочке инструментов. Тем не менее, есть хорошая запись в блоге об их реализации на языке C.
http://www.vishalchovatiya.com/coroutine-in-c-language/< /а>
Я не включаю контент из блога, так как это не маленький фрагмент, но я сделал дублирующий снимок на случай, если исходный сайт выйдет из строя:
https://web.archive.org/web/20210428125420/http://www.vishalchovatiya.com/coroutine-in-c-language/