MMP Cvičenie 2

Z SensorWiki
Prejsť na: navigácia, hľadanie

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

Postup

AVR GCC

  • 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=atmega328p -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=atmega328p -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 example1.elf example1.hex
  • Výsledný program nahráme do procesora a vyskúšame.
    C:\> avrdude -c avrisp2 -P com4 -p atmega328p -U flash:w:example1.hex:a -F


  1. Zoznámte sa s vývojovou doskou Acrob a s procesorom ATmega328 (datasheet - 22,3MB!, stiahnite si na svoj počítač).


  1. Zapojte obvod s LED a tlačítkom podľa schémy zapojenia (farebný kód rezistorov)

MMP Cvicenie2 Sch.png


Ú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.

AVR Studio -- simulácia programu v C

  1. Vytvorte nový projekt v AVR Studio 4, zvoľte si pritom nie typ assembler ale WinAVR. Použite ako cieľový procesor ATmega328P
  2. Ako zdrojový program použite fungujúci Example1, alebo Example2 z predošlej úlohy
  3. Program preložte a skúste odkrokovať.
  4. Na záver môžete program nahrať priamo do procesora nástrojom Xloader.
 (nedá sa na to použiť priamo AVR Studio, pretože nepodporuje nainštalovaný bootloader)


Časové oneskorenie

Pozrite si AVR Example3.c, program, v ktorom použijeme časovanie pomocou slučky s pevným počtom cyklov.


Ú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í...