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

时间:2019-03-19 05:49:48

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

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

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

有什么办法吗?

2 个答案:

答案 0 :(得分: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树中指定正确的包含项来为设备进行编译。

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

答案 1 :(得分: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.in, 头文件也会更改。