Jak Začít?

Máš v počítači zápisky z přednášek
nebo jiné materiály ze školy?

Nahraj je na studentino.cz a získej
4 Kč za každý materiál
a 50 Kč za registraci!




BPC-MIC06 - Obsluha hardware v jazyce C

PDF
Stáhnout kompletní materiál zdarma (195.9 kB)

Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu PDF.

Obsluha hardware v jazyce C

Modifikátor volatile

• Deklarace proměnných, které mohou být 

měněny asynchronně.

– To znamená mimo oblast kódu právě prováděné 

funkce.

• K asynchronní změně může dojít:

– Změnou signálů na vstupním portu.
– Ve funkci obsluhy přerušení (a z ní volaných 

funkcí).

Modifikátor volatile

• Překladač musí generovat takový strojový kód, 

aby si procesor proměnnou vždy před 
použitím přečetl z paměti.

• volatile proměnná tedy nesmí být uchovávána 

v registru, ale musí být uložena v paměti.

Příklad použití volatile proměnné

volatile uint8_t timer;

int main(void)
{

………
timer = 100;
while(timer != 0) {}
………

}

void interrupt timisr(void)
{

……
timer--;

}

Generovaný kód

Bez volatile - chyba

LDA timer

LOOP:

BNE LOOP

S volatile

LOOP:

LDA timer
BNE LOOP

while(timer != 0) {}

Co se stane při vynechání volatile

• Bez použití volatile by mohl překladač:

– Usoudit, že proměnná timer není modifikována a 

tudíž nemůže dosáhnout hodnoty 0.

– Vygenerovat kód, který si přečte proměnnou timer

pouze jednou před vstupem do smyčky. Ve smyčce 
již proměnnou číst nebude a tím dojde k uváznutí 
v nekonečné smyčce.

Přerušovací rutiny

#define VectorNumber_Virq 2u

interrupt VectorNumber_Virq void isrIRQ(void) 
{

}

void main(void) 
{

EnableInterrupts; /* enable interrupts */

}

Přístup k registrům periferií

/*** PTAD - Port A Data Register; 0x00000000 ***/
typedef union {

byte Byte;
struct {
byte PTAD0

:1; 

/* Port A Data Register Bit 0 */

byte PTAD1

:1; 

/* Port A Data Register Bit 1 */


byte PTAD7

:1; 

/* Port A Data Register Bit 7 */

} Bits;

} PTADSTR;

extern volatile PTADSTR

_PTAD @0x00000000;

#define PTAD

_PTAD.Byte

#define PTAD_PTAD0

_PTAD.Bits.PTAD0

#define PTAD_PTAD0_MASK

1u

Celočíselné datové typy s přesně 

určenou šířkou

• Při práci s HW mají konfigurační, stavové a 

datové registry přesně danou velikost (počet 
bitů).

• V  programech zejména pro embedded 

systémy používat proměnné o zbytečně 
velkém počtu bitů je plýtváním často malé 
paměti.

Témata, do kterých materiál patří