如何将新版本的gcc中提供的架构添加到旧版本的gcc中?

问题描述 投票:0回答:2

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

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

有没有办法做到这一点?

gcc cross-compiling avr atmega avr-gcc
2个回答
0
投票

您不需要更新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树中指定正确的包含来为您的设备编译。

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


0
投票

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

  1. gcc - gcc \ config \ avr \ avr.c,gcc \ config \ avr \ avr.h,gcc \ config \ avr \ t-avr,
  2. Binutils - gas \ tc-avr.c
  3. avr-libc - avr \ io.h,configure,configure.in和Header文件更改。
© www.soinside.com 2019 - 2024. All rights reserved.