2017-04-27 59 views
0

我學習過的GNU/Linux彙編編程的Arduino的,使用作爲測試板一個Arduino UNO R3與AVR的Atmega 16u2微控制器。如何組裝到Arduino UNO R3(atmega 16u2)?

正如我在這篇文章中閱讀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 q若要組裝

avr-ld -o simple_led_blink.elf simple_led_blink.o q若要鏈接

但是,當我嘗試執行此第二個指令,它顯示了這個錯誤:

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

我已經CH作爲體系結構的支持,它支持這種體系結構。

可能是什麼問題?

更新:最後,正如大衛說,主微控制器是328P,不16u2 我使用說明作爲被寫入指南中,並運行良好

+1

它不與MCU'atmega16u2'工作。嘗試'atmega328' – Sniper

+0

@Sniper隨着atmega328的運行,但我的主板有一個atmega16u2 – AlmuHS

回答

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 

請注意,您可能需要通過額外的選項給連接器,以確保程序的大小和內存大小設置是否正確,但將如果你的程序很小,可能無關緊要。

另外請注意,ATmega16U2不在Arduino的UNO主處理器;主要的是ATmega328P。

我不知道爲什麼在本教程中-mmcu選項是行不通的了。或許近年來,binutils的AVR端口被簡化爲僅瞭解AVR架構,而不瞭解每個單芯片。

+0

謝謝,我會嘗試 – AlmuHS

+0

好吧,我在Arduino網站讀到這個,而16u2感覺是微控制器usb串行轉換器。 以前我改變了固件DFU,這可能是混淆了我。 – AlmuHS