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