Saya tidak punya waktu untuk penjelasan lengkap, tapi saya bisa memberi Anda buku resep gaya perintah yang saya gunakan di kotak Linux saya untuk memprogram AVR:
Persiapan
- Di Ubuntu, pastikan beberapa paket yang diperlukan telah diinstal:
sudo apt-get install avr-libc avrdude binutils-avr gcc-avr srecord
opsional gdb-avr simulavr
untuk debug dan simulasi.
- Saya mulai membuat direktori tempat semua proyek ATtiny saya menemukan rumah:
mkdir ~/attiny: cd ~/attiny
- Untuk setiap proyek saya membuat subfolder khusus (dan saya tidak keberatan dengan nama panjang):
mkdir waveShare4digit8segmentDisplay; cd waveShare4digit8segmentDisplay
Buat sumber
- Edit file sumber dengan editor teks favorit Anda:
vi project.cpp
Pengaturan
Perintah di bawah ini sangat bergantung pada variabel lingkungan, agar pemeliharaan mudah.
- Nama dasar dari file yang digunakan / dibuat:
src=project
- Bendera kompiler umum:
cflags="-g -DF_CPU=${avrFreq} -Wall -Os - Werror -Wextra"
Variabel di bawah ini mungkin perlu diubah tergantung pada programmer yang Anda gunakan. Lihat man
halaman untuk detailnya.
baud=19200
Baudrate yang berkomunikasi dengan programmer Anda dengan PC:
programmerDev=/dev/ttyUSB003
Nama perangkat tempat programmer Anda berada. Periksa dmesg
output untuk detailnya.
programmerType=avrisp
Ini mungkin berbeda untuk programmer Anda yang sebenarnya.
Variabel di bawah ini bergantung pada pengontrol yang tepat yang ingin Anda program:
avrType=attiny2313
Periksa avrdude -c $programmerType
perangkat yang didukung.
avrFreq=1000000
Periksa lembar data pengontrol untuk jam default.
Menyusun
- Langkah pertama adalah membuat file objek:
avr-gcc ${cflags) -mmcu=${avrType) -Wa,-ahlmns=${src).lst -c -o ${src).o ${src).cpp
- Langkah kedua adalah membuat file ELF:
avr-gcc ${cflags) -mmcu=${avrType) -o ${src).elf ${src).o
- Langkah ketiga adalah membuat file Intel Hex, ini adalah file yang sebenarnya dikirim ke programmer:
avr-objcopy -j .text -j .data -O ihex ${src).elf ${src).flash.hex
Pemrograman
- Langkah terakhir adalah memprogram perangkat:
avrdude -p${avrType} -c${programmerType} -P${programmerDev} -b${baud} -v -U flash:w:${src}.flash.hex
Makefile
Sebagai alternatif untuk mengingat perintah, saya membuat makefile sesuai dengan keinginan pribadi saya, Anda dapat menyimpannya dengan nama Makefile
(mind the capital M
). Ia bekerja sebagai berikut:
make makefile
Edit file makefile;
make edit
Edit file sumber;
make flash
Programkan memori flash perangkat;
make help
Daftar perintah lain.
Inilah makefile:
baud=19200
src=project
avrType=attiny2313
avrFreq=4000000 # 4MHz for accurate baudrate timing
programmerDev=/dev/ttyUSB003
programmerType=arduino
cflags=-g -DF_CPU=$(avrFreq) -Wall -Os -Werror -Wextra
memoryTypes=calibration eeprom efuse flash fuse hfuse lfuse lock signature application apptable boot prodsig usersig
.PHONY: backup clean disassemble dumpelf edit eeprom elf flash fuses help hex makefile object program
help:
@echo 'backup Read all known memory types from controller and write it into a file. Available memory types: $(memoryTypes)'
@echo 'clean Delete automatically created files.'
@echo 'disassemble Compile source code, then disassemble object file to mnemonics.'
@echo 'dumpelf Dump the contents of the .elf file. Useful for information purposes only.'
@echo 'edit Edit the .cpp source file.'
@echo 'eeprom Extract EEPROM data from .elf file and program the device with it.'
@echo 'elf Create $(src).elf'
@echo 'flash Program $(src).hex to controller flash memory.'
@echo 'fuses Extract FUSES data from .elf file and program the device with it.'
@echo 'help Show this text.'
@echo 'hex Create all hex files for flash, eeprom and fuses.'
@echo 'object Create $(src).o'
@echo 'program Do all programming to controller.'
edit:
vi $(src).cpp
makefile:
vi Makefile
#all: object elf hex
clean:
rm $(src).elf $(src).eeprom.hex $(src).fuses.hex $(src).lfuse.hex $(src).hfuse.hex $(src).efuse.hex $(src).flash.hex $(src).o
date
object:
avr-gcc $(cflags) -mmcu=$(avrType) -Wa,-ahlmns=$(src).lst -c -o $(src).o $(src).cpp
elf: object
avr-gcc $(cflags) -mmcu=$(avrType) -o $(src).elf $(src).o
chmod a-x $(src).elf 2>&1
hex: elf
avr-objcopy -j .text -j .data -O ihex $(src).elf $(src).flash.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex $(src).elf $(src).eeprom.hex
avr-objcopy -j .fuse -O ihex $(src).elf $(src).fuses.hex --change-section-lma .fuse=0
srec_cat $(src).fuses.hex -Intel -crop 0x00 0x01 -offset 0x00 -O $(src).lfuse.hex -Intel
srec_cat $(src).fuses.hex -Intel -crop 0x01 0x02 -offset -0x01 -O $(src).hfuse.hex -Intel
srec_cat $(src).fuses.hex -Intel -crop 0x02 0x03 -offset -0x02 -O $(src).efuse.hex -Intel
disassemble: elf
avr-objdump -s -j .fuse $(src).elf
avr-objdump -C -d $(src).elf 2>&1
eeprom: hex
#avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U eeprom:w:$(src).eeprom.hex
date
fuses: hex
avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U lfuse:w:$(src).lfuse.hex
#avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U hfuse:w:$(src).hfuse.hex
#avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U efuse:w:$(src).efuse.hex
date
dumpelf: elf
avr-objdump -s -h $(src).elf
program: flash eeprom fuses
flash: hex
avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U flash:w:$(src).flash.hex
date
backup:
@for memory in $(memoryTypes); do \
avrdude -p $(avrType) -c$(programmerType) -P$(programmerDev) -b$(baud) -v -U $$memory:r:./$(avrType).$$memory.hex:i; \
done
Tampaknya perlu dijalankan avrdude
sebagai root
, jika itu terjadi, ia membenarkan pertanyaan sendiri . Ini dapat dipecahkan dengan udev
tetapi membutuhkan sedikit informasi spesifik dari bagaimana programmer diakui oleh sistem operasi.
Halo Dunia
Biarkan saya melempar 'Hello World' yang membuat pin pengontrol 2 (PB3) (mis. ATtiny13, ATtiny45, ATtiny85) beralih di 1Hz. Pasang LED dan resistor seri ke pin dan LED akan mulai berkedip.
i
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB = 0x08;
while (1) {
PORTB = 0x00; _delay_ms(500);
PORTB = 0x08; _delay_ms(500);
}
}
<ESC>:wq
Selesai
Anda dapat menggunakan alat AVR GNU sebagai paket mandiri di linux. Ini termasuk avr-gcc, avr-binutils, dan avr-libc. Inilah yang disebut sebagai toolchain.
Setelah Anda membuat file hex dan Anda ingin mem-flash-nya ke chip Anda, Anda bisa menggunakan avrdude.
Semua ini tersedia secara bebas dan siap pakai di Linux dan tidak terlalu sulit untuk dikonfigurasikan untuk bekerja bersama.
LadyAda memiliki tutorial langkah demi langkah yang solid pada seluruh proses.
sumber
Untuk mengembangkan AVR di Ubuntu hanya ada beberapa langkah:
Instal rantai-Alat :
sudo apt-get install gcc-avr binutils-avr gdb-avr avr-libc avrdude
Buat Hello world Code dan simpan:
Unduh Makefile tempelate dan simpan di direktori yang sama tempat Anda menyimpan
hello_world.c
file.Edit Makefile :
Bangun target
Cukup ketik
make
konsol dan tekan enter.Unggah instruksi ke AVR menggunakan avrdude
Gunakan perintah di konsol sebagai: (diasumsikan bahwa programmer yang Anda gunakan adalah usbasp, google atau lihat manual untuk opsi lain)
sumber