使用 AVR 选项编译 gcc

Mah*_*ssi 1 assembly gcc avr

我想生成面向 AVR 架构的代码的汇编文件,我使用的是带有以下参数的 gcc 版本 4.7.2:

g++ -O3 -Wall -S -Wp,-mmcu=atmega8 -o "src\Compression.o" "..\src\Compression.cpp"

但我收到以下错误:

cc1plus.exe:错误:无法识别的命令行选项“-mmcu=atmega8”

但我从 gcc 网站得到了命令选项:http : //gcc.gnu.org/onlinedocs/gcc-4.7.3/gcc/AVR-Options.html#AVR-Options

应该有我遗漏的东西,你能帮我解决这个问题吗!

Ber*_*ium 5

如果gcc不接受-mmcu,您可能没有使用支持 AVR 架构的 gcc。

它通常是这样使用的:

avr-gcc -mmcu=atmega328p

因为它不仅是预处理器,实际上还有其他需要此设置的工具(链接器、汇编器)。

通常,gcc编译的体系结构由前缀表示,在这种情况下avr-是约定俗成的。

所以解决方案是获得一个支持 AVR 的工具链。您可以从 Atmel 的网站下载它,甚至适用于 Linux。

更新

如果你想检查你的配置gcc,你可以使用-dumpmachine来检查目标处理器

$ gcc -dumpmachine
i486-linux-gnu

$ arm-none-eabi-gcc -dumpmachine
arm-none-eabi

$ avr-gcc -dumpmachine
avr

如果您使用以下命令查看目标特定选项 --target-help

$ gcc --target-help | grep
March -march= 为给定的 CPU 生成代码

你可以看到 Linuxgcc也接受-march。以后可能会失败。

gcc是一个非常复杂的软件,因为它只支持这么多不同的架构。从这个角度来看,它运行得非常好。

另一个有趣的选择是 -v

$ gcc -v
使用内置规范。
目标:i486-linux-gnu
配置:../src/configure -v --with-pkgversion='Debian 4.4.5-8'
[...]

看看它是如何gcc构建的。

可能还有另一个陷阱(多库),正如你在这里看到的