CADRS Cvičenie 8
Zo stránky SensorWiki
Programovanie mikroprocesorov Atmel AVR v jazyku C
Téma: Programové a technické prostriedky pre tvorbu aplikácií s mikroprocesorovými systémami (simulátor, emulátor, programátor). Pamäťový podsystém procesorov. Binárne vstupy a výstupy.
Študijná literatúra
- AVR Assembler Tutorial (anglicky aj nemecky pre hlbšie štúdium).
Postup
1
Pripomeňte si schému vývojovou doskou (schéma zapojenia), a procesor ATmega16 (datasheet).
1
AVR GCC -- najjednoduchší program tlačítko a LED (AVR Example1.c,AVR Example2.c - to isté s makrami)
- Program modifikujte tak, aby bol spustiteľný na vašej doske. T.j. pozrite sa do schémy zapojenia, kam máte pripojené LED diódy a tlačítka.
- Kompilácia a linkovanie
Najprv treba zdrojový program skompilovať:
C:\> avr-gcc -g -Os -mmcu=atmega16 -c example1.c
Pritom potrebuje kompilátor poznať, pre aký typ procesora má preklad prispôsobiť. To robíme prepínačom -mmcu. Prepínačom -Os zvolíme optimalizáciu vzhľadom na veľkosť výsledného kódu (príadne aj na úkor rýchlosti). Prepínač -g zariadi pripojenie informácí pre debuger. Je to užitočné pri spätnom preklade a ladení programov, do výsledného kódu sa táto nadbytočná informácia nezanáša. Posledný prepínač, -c hovorí kompilátoru, že má len kompilovať, a nie aj linkovať. Tento príklad by sa síce dal v jednom kroku aj zlinkovať, ale nenaučili by sme sa linkovať a v reálnej praxi často program linkujeme z niekoľkých blokov.
Kompilátor vytvorí example1.o, ktorý teraz zlinkujeme do binárneho súboru example1.elf
C:\> avr-gcc -g -mmcu=atmega16 -o example1.elf example1.o
Aj tu je potrebné špecifikovať správny typ cieľového procesora, aby sa prilinkovali správne štartovacie rutiny a knižnice.
Čo s výsledným súborom? S napálením do procesora sa neunáhlime, najprv sa pozrime, aké veľké miesto v pamäti náš výtvor zaberá:
C:\> avr-objdump -h example1.elf
Ešte užitočnejší je prepínač -S, ktorý urobí spätný preklad a na základe informácií pre debugger ho pomieša so zdrojovým kódom aplikácie, takže je jasne vidieť, ktorú časť programu ako preložil. Túto možnosť ponúka síce aj samotný kompilátor, ale neuvidíme prilinkované knižnice a štartovací kód.
C:\> avr-objdump -S example1.elf > example1.lst
V príklade sme výstup presmerovali do súboru, aby sa dal pohodlne prezerať.
3
Generovanie Intel Hex
Pretože väčšina programovcích prístrojov (programátorov) nerozumie vytvorenému .elf súboru, musíme ho prekonvertovať napr. do tzv. Intel Hex formátu:
C:\> avr-objcopy -j .text -j .data -O ihex demo.elf demo.hex
- Výsledný program napálime cez PonyProg do procesora a vyskúšame.
4
Úloha: Upravte predošlý program aby realizoval R-S klopný obvod.
Makefile
Keby sme mali pri každom preklade vypisovať všetky príkazy, asi by nás to skoro prestalo baviť. Našťastie má kompilátor avr-gcc vo výbave aj príkaz make. Funguje tak, že ak napíšete
C:\> make
tak začne hľadať v aktuálnom priečinku súbor makefile. Jeho obsah môže vyzerať napríklad takto. Je tam zapísané, ktorý súbor od ktorého závisí, takže dokonca ak zmeníme len nejaký menej dôležitý hlavičkový súbor, prekladajú sa len relevantné časti projektu a nie všetko odznova.
Pri použití integrovaných vývojových prostredí je makefile oveľa rozsiahlejšie a vytvára sa na základe preddefinovanej šablóny.
- AVR Studio -- simulácia programu v C.
- Vytvorte nový projekt v AVR Studio 4, zvoľte si pritom nie typ assembler ale WinAVR. Použite ako cieľový procesor ATmega16.
- Aok zdrojový program použite fungujúci Example1, alebo Example2 z bodu 3.
- Program preložte a skúste odkrokovať.
Časové oneskorenie
Pozrite si Example3.c, program, v ktorom použijeme časovanie pomocou slučky s pevným počtom cyklov.
Prípadne si nahrajte celý projekt, aby fungoval, musí byť v c:\mmp\Example3.
Úloha: Opravte program tak, aby naozaj realizoval funkciu v zhode s názvami.
Návod: pozrite sa ako kompilátor program preloží a spočítajte, koľko trvá jeden úplný cyklus. Potom zo známej F_OSC vypočítajte, koľkokrát treba cyklus spustiť.
Zmerané priebehy na pine PD5 pre delay_ms(1) (Example3.c)