BPC-MIC06 - Obsluha hardware v jazyce C
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.