如何 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架构,不知道每一个芯片。
我正在 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架构,不知道每一个芯片。