Update firmware documentation and agent guidance
This commit is contained in:
+20
-1
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user