Arduino是否完全支持C ++标准库?

时间:2016-06-01 17:34:07

标签: c++ arduino c++-standard-library

不询问<string>,而是关于标准库整体用于微控制器。

我还没有拥有一个Arduino板来执行代码,正如标题所说,我很好奇是否在Arduino上完全支持C ++标准库并且已经是Arduino IDE的一部分。毫无疑问,标准库可能是最有效,经过全面测试和资源最少的公开可用的C ++代码,并且可以让像Arduino这样的微控制器的编码生活更轻松。

或者,我是否错过了Arduino /微控制器的观点?那,因为他们的资源是如此有限,大多数代码必须完全针对特定功能,而不是通用或模板化?

如果标准库不是Arduino IDE的一部分,那么如何包含<algorithm><bitset>等特定库?

1 个答案:

答案 0 :(得分:5)

Arduino与其他嵌入式系统项目截然不同。首先,它使用自己的基于C / C ++的language。另一方面,您需要处理令人难以置信的专业软件,而您不太可能需要<string><bitset>的大量抽象。与自制内核相比,您可以在这里处理桌面级硬件,标准库可以帮助开发。此外,自制软件内核最终希望成为自托管的#34;,即他们可以将GCC和libstdc ++移植到用户空间。同样,这是你在Arduino环境中不会看到的东西。

现在当你谈到Arduino附带的libraries时,这是一个完全不同的故事。这些是用C或C ++编写的,可以从一个移植的标准库中受益,但它不太可能有用。移植STL并非易事,而且是very, very big。大多数功能远远超过必要的功能 - 您真的需要<string><bitset>来读取或写入端口的字节吗?然后从开发人员的角度考虑成本和复杂性:Arduino开发人员将采用这种艰巨的(双关语)任务来实现它,支持它的大部分时间未使用或被撕掉(想想自定义分配器。)

最后一点,有大量的Arduino板有不同的规格。标准库是在现有C库之上构建的抽象。有一次,您将不得不陷入困境并实际编写C库和运行时的代码,使标准库本身不可移植(想想libstdc ++ - arm-none-eabi-newlib)。

现在,如果您对此不满意,您仍然可以通过在为Arduino编写自己的库时tutorial来移植STL的子集。