Hallo, ich blich nicht ganz durch. Folgende Routine hat deutlich kleineres Compilat wenn ich /* wegnehme. Scheint dass WinAVR LIPO_HV wegoptimiert. LIPO_HV wird aber in Main erst neu bestimmt.
1 | bool LIPO_HV = false; |
2 | |
3 | void eeprom_write_byte_save(uint8_t *__p, uint8_t __value) |
4 | {
|
5 | /*if (LIPO_HV)
|
6 | {
|
7 | */
|
8 | cli(); |
9 | |
10 | eeprom_write_byte (__p,__value); |
11 | sei(); |
12 | /*
|
13 | }
|
14 | else
|
15 | {
|
16 | blink_err();
|
17 | }
|
18 | */
|
19 | }
|
Wenn ich LIPO_HV volatile deklariere ist das nicht so. Bisher habe ich soweit verstanden: Volatile dann, wenn globale Variablen in ISR und Main benutzt werden. Wie kann ich sicher wissen, welche Variablen ich volatile deklarieren muss?