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

How to assemble to Arduino UNO R3 (atmega 16u2)?

我正在 GNU/Linux 学习 Arduino 的汇编编程,使用带有 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 架构支持,并且支持此架构。

可能是什么问题?

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

通过 运行ning 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架构,不知道每一个芯片。