【问题标题】:How can i add a architecture which is available in new version of gcc to a old version of gcc?如何将新版本的 gcc 中可用的架构添加到旧版本的 gcc?
【发布时间】:2019-03-19 05:49:48
【问题描述】:

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

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

有什么办法吗?

【问题讨论】:

  • 如果你想将 Atmega1281 支持反向移植到 v3.3 中,那就去吧。 Here's the code.
  • 它只是链接到原始 gcc。没有意义。
  • 一般来说,整个AVR家族都是一样的,所以,你只需要找到所有的.h文件(这些文件间接包含在新工具链的中并包含将它们直接添加到您的项目中。
  • 编译器应该知道为新架构生成可执行文件,包括没有意义。
  • 整个AVR大家族的代码都是一样的,假设ATmega328和ATmega1281的代码没有区别,只是flash/ram/eeprom的大小,以及在哪里和哪个IO寄存器位于。

标签: gcc cross-compiling avr atmega avr-gcc


【解决方案1】:

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

如果您使用这些核心库,您可能需要更新AVRlibc,并且您需要为avrdude 等编程实用程序添加设备配置。

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


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


但不要从我这里得到它,这是来自标题为支持“不支持”设备部分中AVR-GCC wiki的相关信息。

当您将代码输入编译器并针对特定的 设备,编译器将只关心各自的内核;它不会 照顾确切的设备。编译器有多少并不重要 设备具有的 I/O 引脚、它在什么电压下工作、有多少 RAM 目前,芯片上有多少个定时器或 UART,或者在什么 包裹它被运送。编译器唯一要做的事情 -mmcu=device 是内置定义一个特定的宏,并以特定的方式调用链接器,即编译器驱动的行为有点 不同,但是像编译器和汇编器这样的子工具会 生成完全相同的代码。

因此,您可以通过手动设置这些选项来支持您的设备。

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

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

【讨论】:

  • 如果我使用当前的 avr-gcc 3.3 为 atmega1281 构建,我会收到错误,因为它是未知的 mcu。此外,如果我这样做,“avr-gcc --target-help”,该架构不可用。所以我需要在当前的avr-gcc3.3中加入对Atmega1281的支持。
  • 查看我的答案的更新部分。您误解了这些消息的含义。您仍然可以为“不受支持”的设备进行编译,因为编译器并不关心设备,它只是帮助您包含正确的定义和链接的库。
【解决方案2】:

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

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

  2. Binutils - 气体\tc-avr.c

  3. avr-libc - avr\io.h, 配置, 配置.in, 并且头文件发生变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多