如何将新版本 gcc 中可用的体系结构添加到旧版本的 gcc 中?

How can i add a architecture which is available in new version of gcc to a old version of gcc?

我想将 Atmega1281 架构添加到我当前使用的 gcc 版本中,即 v3.3。 v3.3 不支持 Atmega1281,在 v4.2.1 中添加了对它的支持。

我无法将 gcc 升级到 4.2.1,所以我需要添加对现有编译器的支持。

有什么办法吗?

您不需要更新 GCC(我假设您实际上是在使用 AVR-GCC 来生成特定于 AVR 的机器代码...)。所有 AVR 芯片都使用相同的 AVR 内核和指令集。从一个芯片到另一个芯片唯一不同的是内存大小、寄存器地址和外围设备的可用性。

可能需要更新AVRlibc if you use those core libraries, and you'll need to add device configurations for a programming utility like avrdude

您必须更新定义寄存器位置的核心 headers,除非您定义自己的指向原始内存地址的指针(如老板)。这可以在 Atmel Packs 中找到,特别是对 Atmega 设备的支持。


当您在项目中包含 io.h 时,会引入 device-specific 定义以及指向内存的明确定义指针,以访问外围设备配置和数据寄存器。这仅在您将正在使用的设备作为编译命令中的特殊定义传递时才有效。如果您使用的是标准 Makefile 模板,则设备是您编辑的内容之一,它会处理这些命令。同样,像 Atmel Studio 这样的 IDE 会询问您使用的是什么设备并为您生成 Makefile。


但不要从我这里拿走,这是标题为 支持 "unsupported" 设备[=33] 部分中 AVR-GCC wiki 的相关信息=].

When you feed code into the compiler and compile for a specific device, the compiler will only care for the respective core; it won't care for the exact device. It does not matter to the compiler how many I/O pins the device has, at what voltage it operates, how much RAM is present, how many timers or UARTs are on the silicon or in what package it is shipped. The only thing the compiler does with -mmcu=device is to build-in define a specific macro and to call the linker in a specific way, i.e. the compiler driver behaves a bit differently, but the sub-tools like compiler proper and assembler will generate exactly the same code.

Thus, you can support your device by setting these options by hand.

因此,如果您出于任何原因无法更新 AVR-GCC,您仍然可以通过手动告诉链接器在哪里查找内容并从 io.h 树中指定正确的包含来为您的设备编译.

Wiki 还提供了有关如何执行此操作的更多说明。

为了添加架构, 三件事需要更新,

  1. gcc - gcc\config\avr\avr.c, gcc\config\avr\avr.h, gcc\config\avr\t-avr、

  2. 二进制工具 - gas\tc-avr.c

  3. avr-libc - avr\io.h, 配置, configure.in, 和头文件更改。