AVR gcc 版本 < gcc 发行版本 -- 为什么?

Lou*_* B. 2 c++ gcc avr atmelstudio

我注意到 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 + AVR 工具链中是否添加了 C++ 语言的新功能?
  • 我可以将它们与 Atmel Studio 或 Arduino IDE 一起使用吗?

Jon*_*per 5

概述

\n

当使用某些构建选项构建并传递正确的标志时,gcc 支持 AVR 编译。使用这些特定于 AVR 的构建选项构建的 gcc 是 avr-gcc。

\n

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

\n

Zak Kemble发表了一篇精彩的博客文章,其中包含工具链中所有内容(avr-gcc、binutils、avr-libc)的最新版本,可用于 Windows(以及 Make 和 AVRDUDE)、Linux 和 MacOS。此外,Arch Linux在这里将 avr-gcc 的最新版本作为软件包保留。

\n

对于 Arduino,我提到的博客文章详细介绍了如何将 avr-gcc 的更新版本集成到 Arduino IDE 中,并包含一个构建脚本(如果您想自己构建 avr-gcc)。我没有使用过 Atmel Studio,也不知道是否可以以类似的方式替换 avr-gcc 版本,但发行说明让我认为这是可能的。

\n

注意事项:

\n
    \n
  • gcc wiki上讨论过但这里没有讨论的一点是 avr-libc,它似乎基本上不活跃(几年内没有 repo 提交)。即使 gcc 支持您的目标平台,avr-libc 也必须支持它。如上所述,gcc 5.x 停止支持。
  • \n
  • Atmel 警告 AVR 上的 C++ 存在已知限制,avr-libc 常见问题解答此处对此进行了讨论。基本上,如果您\xe2\x80\x99 希望使用标准库,那么您\xe2\x80\x99 就不走运了。\n\n
  • \n
\n

概括:

\n

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

\n