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