Operácie

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

Vývojová doska MiniMEXLE.

Postup

Pripomeňte si schému zapojenia vývojovej dosky (schéma zapojenia), a procesor ATmega16 (datasheet).

AVR GCC

  • Preštudujte 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ť.

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 nahráme do procesora a vyskúšame.

Úloha

Upravte predošlý program aby realizoval R-S klopný obvod.

Hapsim

Nainštalujte si simulátor HAPSIM: [1] Skúste príklad s LED diódou aj s HAPSIMom.

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.

  1. 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)

Pamäťové priestory

Pozri AVR Pamäťové priestory


Návrat na zoznam cvičení...