2017-04-27 4 views
0

私は、テストボードとしてAVR Atmega 16u2マイクロコントローラを備えたArduino UNO R3を使用して、GNU/Linux上のArduinoのアセンブリプログラミングについて学んでいます。私はこの記事で読んで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は、

avr-ld -o simple_led_blink.elf simple_led_blink.o #toリンク

を組み立てるしかし#to、それはこのことを示していますエラー:私はCHき

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

アーキテクチャーサポートとしてavr-asで採用されており、このアーキテクチャーがサポートされています。

何が問題なのですか?

更新:最後に、ダビデが言うように、メインマイコンは328Pである、ない16u2 ガイドに書かれて、私は命令を使用し、それは我々が正しいことを伝えることができるavr-gcc test.c -v -mmcu=atmega16u2を実行することによっても

+1

mcu 'atmega16u2'では動作しません。 'atmega328'で試してください – Sniper

+0

@Sniper atmega328を実行していますが、私のボードにはatmega16u2があります – AlmuHS

答えて

1

を実行します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アーキテクチャのみを知り、すべてのシングルチップについては知らないために近年単純化されました。

+0

ありがとう、私はそれを試してみます – AlmuHS

+0

これはArduinoサイトで読んでいて、16u2はusb-serialコンバータ。 以前はdfuでファームウェアを変更しましたが、これはおそらく私を混乱させました。 – AlmuHS

関連する問題