Az I2C_SR3-at volatile-kent kell deklaralni. Ha nem ugy van deklaralva akkor biztos kioptimalizalja fordito. Nem ismerem az STM8-as cimtartomanyait de pl AVR-bol kiindulva imigyen kellene, ha ott is igy hivnak ezt a 8 bites regisztert:
#define I2C_SR3 ( *(volatile uint8_t *)(0x23))
De egzaktul ugyanez a sema ARM+STM32 eseteben is, csak ott inkabb 32-bites I/O van (bar van ott is 16 meg 8 bites is, sok esetben a doksi nem is explicit irja hogy kell 8 bites access, de... na mindegy, az mar mas problemakor, de a volatile oda is kell).