AVR gcc version < gcc release versions——为什么?

AVR gcc version < gcc release versions -- why?

我注意到 AVR 的 gcc 落后于 gcc 的主要开发流程。例如,AVR8 的 gcc 在 Atmel Studio 7 和 Arduino 中为 4.9.2,而 AVR32 在 Atmel Studio 中为 4.4.7。同时,gcc 4.9.4 是当前的 4.9 版本,开发正在推动多个分支 5.x、6.x 和 7.x (https://gcc.gnu.org/develop.html).

更新(2019 年 11 月): Atmel Studio 和 Arduino 工具链现在升级到 gcc 5.4,它仍然只完全实现 C++11。


我担心的是,我可能会 运行 通过将 C++ 语言最近添加的功能与较旧的编译器一起使用来解决早期实现问题。此外,gcc 中 AVR 支持的开发过程尚不清楚。

如果您想使用特定版本的 GCC,请使用它。自己构建或获得预构建,没有理由需要使用 Atmel 沙箱。

概述

gcc 在使用某些构建选项构建并传递正确标志时支持针对 AVR 进行编译。使用那些特定于 AVR 的构建选项构建的 gcc 是 avr-gcc。

Atmel 和 Arduino 都附带 avr-gcc 的自定义版本和所需工具链的其余部分(binutils、avr-libc)。 Arduino 实际上是 Atmel 工具链的下游,Arduino 只在 Atmel 更新工具链时才更新。

有一个nifty blog post by Zak Kemble that has the recent builds for everything in the toolchain (avr-gcc, binutils, avr-libc), available for Windows (along with Make and AVRDUDE), Linux, and MacOS. Additionally, Arch Linux keeps an up-to-date build of avr-gcc here作为一个包。

对于 Arduino,博客 post 我提到了如何将更新版本的 avr-gcc 集成到 Arduino IDE 中的详细信息,如果您想在您的设备上构建 avr-gcc,还包括一个构建脚本自己的。我没有使用过 Atmel Studio,也不知道是否可以用类似的方式换掉 avr-gcc 构建,但是 release notes 让我觉得这是可能的。

注意事项:

  • gcc wiki 上讨论但此处未讨论的一点是 avr-libc,它似乎基本上不活跃(几年内没有 repo 提交)。即使 gcc 支持您的目标平台,avr-libc 也必须支持它。如上所述,gcc 5.x.
  • 停止支持
  • Atmel 警告说 AVR 上的 C++ 和 avr-libc 常见问题解答存在已知限制 discusses it here. 基本上,如果您希望使用标准库,那您就倒霉了

总结:

Atmel 和 Arduino 包括仅通过 5.x 支持 gcc 的 avr-libc。这使您可以访问 C++11。您 可以 将其换成更新版本的 avr-gcc、binutils 和其他版本,并继续使用 IDE(至少对于 Arduino)。如果您想释放 IDE 的选择,请使用 AVRDUDE 或 arduino-cli(无论如何都使用 AVRDUDE)并从 IDE 或命令行调用它们。最后,据我所知(我看过),没有现代的 >= C++11 标准库实现可用于 AVR。