Update firmware documentation and agent guidance

This commit is contained in:
2026-07-24 09:27:07 +02:00
parent ac3b2aa90f
commit 50dbf8fbee
26 changed files with 592 additions and 196 deletions
+20 -1
View File
@@ -17,6 +17,13 @@ Dateien:
Makros und Config sind komplett getrennt.
Diese Tabelle beschreibt die Adressen, auf die der Laufzeitcode zugreift. Das
aktive Linker-Skript reserviert davon aktuell nur `0x1FE00..0x1FFFF`
ausdrücklich; Makrobereich und erste Config-Row liegen noch im zulässigen
Firmware-ROM. Das aktuelle Binary ist klein genug, aber die Bereiche sind
nicht vollständig gegen Firmwarewachstum geschützt. Siehe
[09_known_limitations.md](09_known_limitations.md).
## `SDeviceConfig`
Aktueller Stand:
@@ -38,6 +45,9 @@ Aktueller Stand:
| `9` | 4 | `enc_sensitivity[4]` |
| `13` | 19 | Reserve |
`enc_sensitivity` ist im Binärformat vorhanden und hat Default `1`, wird von
der Encoderdekodierung derzeit aber nicht verwendet.
### Pro Profil
Jedes Profil belegt 236 Byte:
@@ -97,12 +107,19 @@ Praktisch sichtbares Ergebnis:
5. bei Fehlern Defaults laden und `false` zurueckgeben
Die Firmware faellt also immer auf einen gueltigen Zustand zurueck.
Die Defaults werden bei diesem Fallback nur in das übergebene RAM-Struct
geschrieben und nicht automatisch in Flash persistiert.
Nach erfolgreicher CRC-Prüfung sichert `load()` einen zu großen
`active_profile` im RAM auf Profil 0 ab. Andere Felder und Enum-Werte werden
nicht auf gültige Bereiche geprüft.
## Speichern
`nvm_config_save()`:
1. 740-Byte-Config in einen 768-Byte-Row-Puffer kopieren
1. die vom Aufrufer bereits vorbereitete 740-Byte-Config in einen
768-Byte-Row-Puffer kopieren
2. Rest mit `0xFF` fuellen
3. `MANW = 1`
4. 3 Rows loeschen
@@ -117,6 +134,8 @@ Wichtig:
- der Schreibpuffer muss 4-Byte-aligned sein
- `packed` allein reicht dafuer nicht
- `nvm_config_save()` berechnet die CRC nicht selbst; der Aufrufer muss
`cfg.crc = nvm_config_crc(cfg)` vorher setzen
## Zusammenhang mit Werksreset