【问题标题】:Is the C++ Standard Library fully supported on Arduino?Arduino 是否完全支持 C++ 标准库?
【发布时间】:2016-10-01 05:07:33
【问题描述】:

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

我还没有一个 Arduino 板来执行代码,正如标题所说,我很好奇 C++ 标准库是否完全支持 Arduino 并且已经是 Arduino IDE 的一部分。毋庸置疑,标准库可能是目前最高效、经过全面测试且资源最少的公开可用 C++ 代码,并且将使为 Arduino 等微控制器编写代码变得更加容易。

或者,我是否以某种方式错过了 Arduino/微控制器的意义?那是因为他们的资源非常有限,大多数代码必须完全针对特定功能量身定制,而不是通用或模板化?

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

【问题讨论】:

  • 这似乎根本不是重复的。它根本没有提到 Arduino 字符串库,并且具有完全不同的上下文和范围。
  • “Arduino”有点宽泛。这就像询问标准库是否在微控制器上可用。您需要了解是否有 SDK 可用,或者是否有人为您的特定平台移植了标准库。
  • “标准库可能是最有效的”,其实不是。
  • @NonCreature0714 仅供参考:在库管理器中查看我的 BitBool 库,它像数组一样管理位集。
  • Arduino Due 工具集有标准库,而 Arduino Uno 缺少它。但是有人解决了这个问题(这只是 Github 上几个这样的项目之一):github.com/maniacbug/StandardCplusplus

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


【解决方案1】:

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

现在,当您谈论 Arduino 附带的 libraries 时,情况就完全不同了。这些是用 C 或 C++ 编写的,可以从移植的标准库中受益,但不太可能有帮助。移植 STL 并非易事,它是very, very big。大多数功能远远超出了必要性——您真的需要<string><bitset> 来读取或写入字节到端口吗?然后从开发人员的角度考虑成本和复杂性:Arduino 开发人员将承担这项艰巨(双关语并非有意)的任务来实现它,在大多数情况下支持它未被使用或被淘汰(想想自定义分配器。)

最后一点,有大量不同规格的 Arduino 板。标准库是建立在现有 C 库之上的抽象。在某一时刻,您将不得不开始为 C 库和运行时编写代码,从而使标准库本质上是不可移植的(想想 libstdc++-arm-none-eabi-newlib)。

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

【讨论】:

  • 很好的答案,这就是我想要的,谢谢!
  • 作为补充说明,即使是微控制器制造商也经常不提供 C++ 标准库实现。如果他们这样做了,就很容易融入到 Arduino 开发环境中。例如:Atmel 微控制器用于很多 Arduino 板,这里是 Atmel 的一篇文章,内容是缺乏对各种 C++ 功能的支持,包括使用 Atmel 开发基础设施的标准库:atmel.com/webdoc/avrlibcreferencemanual/FAQ_1faq_cplusplus.html
  • 一点也不,Arduino 不使用自己的语言。 Arduino 使用标准 C++ 和标准工业级 C++ 编译器 (gcc)。它不是黑魔法,也与任何其他嵌入式项目没有任何实质性区别。主要和最大的区别在于他们确实设法降低了开发简单嵌入式应用程序的准入门槛。
  • 完全错误。它根本不使用自己的语言。它通常使用从 c++ 以及 gnu 和 Arduino 工具链编译的 hex 文件。
  • 在@Mark Amery 的辩护中:Arduino 文档讲述了这种虚假的叙述。他们在谈论 Ardunio 作为语言......天知道他们为什么以及如何到达那里。
猜你喜欢
  • 1970-01-01
  • 2014-04-20
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
  • 2022-07-19
相关资源
最近更新 更多