我想将Atmega1281架构添加到我正在使用的当前版本的gcc中,即v3.3。 v3.3不支持Atmega1281,并且在v4.2.1中添加了它的支持。
我无法将gcc升级到4.2.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树中指定正确的包含来为您的设备编译。
维基还提供了有关如何执行此操作的更多说明。
为了添加架构,需要更新三件事,