Как преобразовать код набора команд Atmel ATmega328P в записываемый шестнадцатеричный код

Я собираюсь начать работу над проектом, для которого ATmega328P кажется хорошим вариантом. Однако я пытался запрограммировать его, используя его набор инструкций, а не библиотеку C AVR. Это создало проблему преобразования и записи программы во флэш-память Atmega. Как это может быть сделано?


person Abhishek Kandoi    schedule 24.02.2014    source источник
comment
сборка и C ничем не отличаются. C компилируется в asm, затем asm превращается в объект, затем объект или объекты связываются, после чего вы получаете двоичный файл, который в конечном итоге загружается во флэш-память. Используя сборку, вы просто сохраняете один шаг, в остальном все ничем не отличается. github.com/dwelch67 avr_samples или avriss, один из них или оба должны иметь примеры сборки asm и C.   -  person old_timer    schedule 27.02.2014


Ответы (1)


Я понимаю, что у вас есть код на ассемблере AVR. В таком случае вам понадобится avr-ассемблер. В системах Linux эта программа называется avr-as и является частью пакета avr-binutils. На Windows-машине я рекомендую установить пакет "winavr" - в нем есть те же инструменты и даже немного красивой IDE для упрощения некоторых процессов.

Как только вы это сделаете, запустите свой ассемблер на своем коде.

avr-as -mmcu=atmega328p  o my_program.elf my_code.asm 

Если все работает правильно, вам все равно нужно будет преобразовать вывод в формат .hex. Это можно сделать с помощью avr-objcopy (из тех же пакетов).

avr-objcopy -O ihex my_program.elf my_program.hex

После этого у вас должен быть my_program.hex, готовый для программирования в вашем контроллере.

person Kissiel    schedule 24.02.2014