Как я могу запрограммировать свой Arduino на C в Ubuntu. Я слышал об avr-gcc, но все онлайн-руководства кажутся чрезвычайно утомительными и не имеют вариантов для чипа AVR с загрузчиком Arduino. Может ли кто-нибудь помочь мне с более простым способом установить avr-gcc на Ubuntu и начать программировать на C для Arduino?
Avr-GCC с Arduino
Ответы (2)
Я рекомендую следующий набор параметров командной строки для компиляции:
avr-gcc -c
-std=gnu99
-Os
-Wall
-ffunction-sections -fdata-sections
-mmcu=m328p
-DF_CPU=16000000
И для связи:
avr-gcc -Os
-mmcu=m328p
-ffunction-sections -fdata-sections
-Wl,--gc-sections
Где…
-c
означает "компилировать только в объектный файл, не связывать"-std=gnu99
означает "Мой код соответствует C99, и я использую расширения GNU"-Os
означает "оптимизировать размер исполняемого файла, а не скорость кода"-Wall
означает "включить (почти) все предупреждения"-ffunction-sections -fdata-sections
необходимо для-Wl,--gc-sections
оптимизации-mmcu=m328p
означает, что "номер детали MCU - ATmega 328P"-DF_CPU=16000000
означает "тактовая частота 16 МГц" (настройте свою фактическую тактовую частоту)-Wl,--gc-sections
означает "указать компоновщику удалить неиспользуемые разделы функций и данных" (это помогает уменьшить размер кода).
Чтобы на самом деле скомпилировать ваш код, вы должны сначала ввести команду avr-gcc
с «флагами только компиляции», например:
avr-gcc -c -std=gnu99 <etc.> MyProgram.c -o MyProgram.o
Затем вы повторите это для всех ваших исходных файлов. Наконец, вы должны связать полученные объектные файлы вместе, вызвав AVR-GCC в режиме связывания:
avr-gcc -Os <etc.> MyProgram.o SomeUtility.o -o TheExecutable.elf
Это создает файл ELF, который не может быть напрямую запущен вашим MCU. Таким образом, вам нужно будет извлечь из него полезную часть (сырой машинный код) в формате Intel Hex:
avr-objcopy -O ihex -R .eeprom TheExecutable.elf TheExecutable.ihex
Наконец, вам понадобится AVRdude для загрузки содержимого шестнадцатеричного файла в MCU:
avrdude -C /path/to/avrdude.conf
-p m328p
-c PROGRAMMER_NAME
-b 19600
-P PORT_NAME
-U flash:w:TheExecutable.ihex:i
Где…
-C /path/to/avrdude.conf
означает "использовать этот файл в качестве файла конфигурации"-c PROGRAMMER_NAME
означает "Я использую программатор типа PROGRAMMER_NAME" (вам нужно будет заполнить это самостоятельно в зависимости от того, какой программатор вы используете).-b 19600
— это скорость передачи (вам может потребоваться настроить ее в зависимости от скорости передачи, которую вы установили или предварительно запрограммировали в загрузчике)-P PORT_NAME
означает "программатор подключен к порту PORT_NAME". В Linux это чаще всего будет что-то вроде/dev/ttyusbN
, где N — какое-то число.-U flash:w:TheExecutable.ihex:i
означает "записать во флэш-память содержимое TheExecutable.ihex в формате Intel Hex".
Если вы просто хотите использовать код C с Arduino, на котором уже установлен загрузчик. Вы можете буквально написать код на C в Arduino IDE и скомпилировать его как обычно. Sketch — это набор заголовочных файлов и макросов.
Вот скетч мигания, написанный на C:
#include <avr/io.h> //defines pins, ports etc
#include<util/delay.h> //functions for wasting time
int main (void) {
//init
DDRB |= (1<<PB5); //Data Direction Register B:
//writing a 1 to the Pin B5 bit enables output
//Event loop
while (1) {
PORTB = 0b00100000; //turn on 5th LED bit/pin in PORT B (Pin13 in Arduino)
_delay_ms (1000); //wait
PORTB = 0b00000000; //turn off all bits/pins on PB
_delay_ms (1000); //wait
} //end loop
return(0); //end program. This never happens.
}
Вставьте это в IDE и попробуйте сами.
Если вы хотите перейти от Arduino к программированию AVR без загрузчика, могу ли я порекомендовать отличную веб-трансляцию Эллиота Уильямса в качестве введения. – https://www.youtube.com/watch?v=ERY7d7W-6nA а>
Удачи и приятного времяпровождения :)
malloc
иfree
, а также указатели в Arduino IDE, они работают так же. - person notadam   schedule 05.09.2015