2017-04-27 6 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 #됐다 링크

를 조립하지만 #됐다,이 표시 오류 :

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 직렬 변환기. 이전에 dfu로 펌웨어를 변경했는데 이로 인해 혼란 스러웠습니다. – AlmuHS