裸机嵌入式设备上的线程

问题描述

裸机臂设备是否支持线程(或 pthread)。我正在使用 ARM/GNU C++(arm-none-eabi-g++) 编译器,尽管我在链接器命令中给出了标志 -lpthread,但在编译时出现错误“找不到 -lpthread”。

解决方法

如果没有支持抢占式多任务处理的操作系统,您就没有线程。这就是术语“裸机”所指的内容。

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/