如何组装到Arduino UNO R3(atmega 16u2)?

时间:2017-04-27 07:45:32

标签: assembly arduino avr

我正在学习Arduino在GNU / Linux上的汇编编程,使用带有AVR Atmega 16u2微控制器的Arduino UNO R3作为测试板。

在我阅读本文https://www.cypherpunk.at/2014/09/native-assembler-programming-on-arduino/时,说明必须是:

avr-as -g -mmcu=atmega16u2 -o simple_led_blink.o simple_led_blink.s #to assemble

avr-ld -o simple_led_blink.elf simple_led_blink.o #to link

但是,当我尝试执行第二条指令时,它会显示以下错误:

avr-ld: avr:35 architecture of input file `simple_led_blink.o' is incompatible with avr output

我已经检查了avr-as架构支持,并且支持这种架构。

可能是什么问题?

更新:最后,正如David所说,主微控制器是328p,而不是16u2 我使用指南中的说明,它运行良好

1 个答案:

答案 0 :(得分:1)

通过运行avr-gcc test.c -v -mmcu=atmega16u2,我们可以看出ATmega16U2的正确AVR架构版本为avr35

因此,要编译程序集,请运行如下命令:

avr-as -mavr35 -g -o test.o test.s
avr-ld -mavr35 -o test.elf test.o

请注意,您可能需要将其他选项传递给链接器,以确保正确设置程序大小和RAM大小,但如果您的程序很小,这可能无关紧要。

另请注意,ATmega16U2不是Arduino UNO的主处理器;主要是ATmega328P。

我不知道为什么教程中的-mmcu选项不再起作用。也许近年来binutils的AVR端口被简化为仅了解AVR架构而不了解每个芯片。