LPCxpresso: Potize s optimalizaci

Pavel Hudecek edizon na seznam.cz
Středa Červenec 27 12:05:05 CEST 2016


Dobrý den všem,

Po zapnutí optimalizace O3 se sice několikanásobně zrychlil chod věcí, kde 
mi na rychlosti záleží, ale nastal problém:

Mám soubor deklarace.h, který se includuje do všech .c a v něm se mj. 
nachází:

volatile uint8_t i2cSync=0;
volatile uint8_t msSync=0;

Pak mám i2c.c a v něm se mj. nachází:

void cbI2CComplete(uint32_t err_code, uint32_t n) {
    i2cIntErr = (int) err_code;
    i2cSync=1;
}

Což je callback funkce od ROM API, která je volána při dokončení I2C 
přenosu.

Dále mám sys.c a v něm je mj. funkce cekani(), která se volá když není co 
dělat. A v ní se mj. nachází:

if (i2cSync==1) { i2cSync=0;
...
}
if (msSync==1) { msSync=0;
...
}
Bez optimalizace to normálně chodí, odtud se zahájí další přenos a tak skoro 
pořád probíhá komunikace se vším co je potřeba.

Po zapnutí O3 ale vnitřek if (i2cSync==1) nevykonává a vypadá to, že i2cSync 
je prostě pořád 0, přestože cbI2CComplete se vykonává. Jen se po 100 ms 
pustí první komunikace, kterou zahájí watchdog umístěný v if (msSync==1), 
kdy msSync se nastaví na 1 každou ms při přerušení od systick timeru.

Co s tím?

Díky,
PH 



Další informace o konferenci Hw-list