В регистрах. Но их (регистров) больше, чем переменных. И все переменные - глобальные. Пересечений нет.
Вот фрагмент на асемблере. После остановки симулятора указатель показывает на адрес 180.
CODE
+00000172: E7AA LDI R26,0x7A Load immediate
+00000173: E0B0 LDI R27,0x00 Load immediate
+00000174: 91EC LD R30,X Load indirect
+00000175: E0F0 LDI R31,0x00 Load immediate
+00000176: 64E0 ORI R30,0x40 Logical OR with immediate
+00000177: 93EC ST X,R30 Store indirect
+00000178: 9508 RET Subroutine return
+00000179: 91E9 LD R30,Y+ Load indirect and postincrement
+0000017A: 91F9 LD R31,Y+ Load indirect and postincrement
+0000017B: 9630 ADIW R30,0x00 Add immediate to word
+0000017C: F039 BREQ PC+0x08 Branch if equal
+0000017D: EA80 LDI R24,0xA0 Load immediate
+0000017E: E09F LDI R25,0x0F Load immediate
+0000017F: 9701 SBIW R24,0x01 Subtract immediate from word
+00000180: F7F1 BRNE PC-0x01 Branch if not equal
+00000181: 95A8 WDR Watchdog reset
+00000182: 9731 SBIW R30,0x01 Subtract immediate from word
+00000183: F7C9 BRNE PC-0x06 Branch if not equal
+00000184: 9508 RET Subroutine return
+00000185: 95F1 NEG R31 Two's complement
+00000186: 95E1 NEG R30 Two's complement
+00000187: 40F0 SBCI R31,0x00 Subtract immediate with carry
+00000188: 9508 RET Subroutine return
+00000189: 2400 CLR R0 Clear Register
Я в этом не понимаю ... Конкретный косяк не видно?
Очень хочется не сохранять все РОН при прерывании.