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

时间:2017-06-17 11:30:09

标签: c++ gcc gnu avr

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

我担心的是 - 我是否会通过使用最近添加的C ++语言功能(c ++ 14,甚至c ++ 17)以及最近编译器来解决神秘问题?源代码中包含的意图是否正确地转换为二进制指令? (我可能会引发一场火焰战,对不起但是我不得不问......)

开发人员太少了吗? AVR代码生成器的额外移植工作? AVR gcc开发人员有意识地决定只骑一匹马?在所有分支4.x和更新的分支中,C ++语言的新功能是否并行添加到gcc?是否记录了开发决策?哪里?

由于

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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和苹果系统。此外,Arch Linux将avr-gcc here作为软件包保持最新版本。

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

注意事项:

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

摘要:

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