Ich glaube ich hab den Fehler gefunden, bin aber nicht ganz sicher:
1 | uint16_t EEMEM pwm_tB;
|
2 | uint16_t EEMEM pwm_tW;
|
3 | uint16_t EEMEM pwm_tL;
|
Damit reservierst du drei Adressen im EEPROM. Nach dem Initialen
Auslesen benutzt du sie aber wie Variablen im RAM. Du benutzt hier die
drei Symbole doppelt. Meckert der Compiler da nicht? Benutze mal die
Option -Wall (sollte man sie eh angewöhnen).
In Wirklichkeit brauchst du drei Plätze im EEPROM und drei Variablen im
RAM, also 6 Symbole.
Ich denke, dass dein Code Schreibzugriffe ins RAM an zufällige Adressen
generiert. Erstelle mal ein Assembler-Listing, da kann man das sicher
gut sehen.