【问题标题】:AVR gcc version < gcc release versions -- why?AVR gcc 版本 < gcc 发布版本——为什么?
【发布时间】:2017-06-17 11:30:09
【问题描述】:

我注意到 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支持的开发过程还不清楚。

  • 是否将 C++ 语言的新功能添加到 gcc + AVR 工具链中?
  • 我可以将它们与 Atmel Studio 或 Arduino IDE 一起使用吗?

【问题讨论】:

  • 我不明白这个问题。您是在问我们为什么一家公司会做出某些决定?或者 GCC 的开发是如何工作的?至于语言特性——它们的支持在 GCC 网站上有很好的记录。
  • 因为 Atmel 需要时间来更新他们定制的 GCC。它编译到不同的平台,他们必须合并源。这需要很多时间。此外,由于主要是基于意见的答案,这个问题对于 StackOverflow 来说是题外话,最终将被关闭。
  • 您可以获取最新的 avr-gcc 工具链作为 Arch Linux 包,或者自己编译:archlinux.org/packages/community/x86_64/avr-gcc

标签: c++ gcc avr atmelstudio


【解决方案1】:

概述

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

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

Zak Kemble 的 nifty blog post 包含工具链中所有内容的最新版本(avr-gcc、binutils、avr-libc),可用于 Windows(以及 Make 和 AVRDUDE)、Linux 和 MacOS。此外,Arch Linux 将最新版本的 avr-gcc here 作为一个包保存。

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

注意事项:

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

总结:

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

【讨论】:

    【解决方案2】:

    如果您想使用特定版本的 GCC,只需使用它即可。自行构建或预构建,没有理由需要使用 Atmel 沙箱。

    【讨论】:

    • 这个答案在未来很有用,虽然不是我所期待的答案——实际上我不确定会发生什么。
    • 这个答案大错特错,主线 GCC 不支持 AVR32,因为对它的支持从未被上游化...
    猜你喜欢
    • 2022-10-25
    • 2021-09-22
    • 2012-05-14
    • 1970-01-01
    • 2023-03-25
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    相关资源
    最近更新 更多