我注意到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?是否记录了开发决策?哪里?
由于
答案 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让我认为这是可能的。
Atmel和Arduino包含avr-libc,该库仅通过5.x支持gcc。这使您可以访问C ++ 11。您可以 换出新版本的avr-gcc,binutils和其余版本,然后继续使用IDE(至少对于Arduino)。如果要释放对IDE的选择,请使用AVRDUDE或arduino-cli(无论如何都使用AVRDUDE),然后从IDE或命令行中调用它们。最后,据我所知(并且我已经看过),没有适用于AVR的现代=> C ++ 11标准库实现。