docs: checkpoint heap4 card audit

This commit is contained in:
mpabi
2026-07-14 20:00:00 +02:00
parent 8aee0b104c
commit 032a06fdef
+133
View File
@@ -0,0 +1,133 @@
# K01 `heap4` — punkt zatrzymania
## Stan repozytorium
- Data: `2026-07-14`.
- Commit bazowy: `8aee0b104c4f6e6ffef119ab6f57a3e724144221`.
- Gałąź robocza: `work/list-first-rp2350-debug`.
- Zmienione źródła: brak.
- Zmieniona karta PDF: brak.
- Lokalny stan `.stem/`: wygenerowany przez testy `stemctl`, nie jest częścią karty.
- Review Claude: nieukończony; dwie sesje CLI nie zwróciły wyniku i zostały zatrzymane.
## Potwierdzone
- [x] `make host` buduje 10/10 programów.
- [x] Wszystkie programy hostowe uruchamiają się z kodem `0`.
- [x] `make tasks RV_ENV_ROOT=...` buduje 10/10 ELF dla RV32I.
- [x] `stemctl test native-amd64 freertos heap4 10` przechodzi.
- [x] RP2350 Probe jest wykrywany bez `sudo` po wejściu do grupy `rpdebug`.
- [x] OpenOCD wykrywa `rp2350.rv0` i `rp2350.rv1`.
- [x] Oba rdzenie raportują `XLEN=32`.
- [ ] Nie wykonano testu programu K01 na RTL Hazard3.
- [ ] Nie wgrano programu K01 na fizyczny RP2350.
## Wyniki bazowe — host AMD64
| Task | Wynik |
|---|---|
| 01 | `header=16 aligned=16 allocated=1 total=32 user=16` |
| 02 | `free=136 largest=80 count=3` |
| 03 | `offset=0 free=144 end_last=1` |
| 04 | `r1=24 r9=32 r17=40 delta=7` |
| 05 | `ok=1 allocated=120 remaining=0` |
| 06 | `allocated=48 split=128 nodes=1` |
| 07 | `order=1 count=3 total=120` |
| 08 | `count=1 size=160 merged_right=1` |
| 09 | `heap=256 adjusted=248 dynamic=1 host_trace=1` |
| 10 | `ok=1 nodes=1 free=240 min=144` |
## Braki P0
- [ ] Dodać `stem-card.yaml`.
- [ ] Obsłużyć targety:
- [ ] `native` / `native-amd64`;
- [ ] `hazard3-baremetal` / `hazard3-sim`;
- [ ] `rp2350-rv` / fizyczny Hazard3.
- [ ] Naprawić `stemctl test hazard3-sim freertos heap4 10`.
- Stan obecny: `Legacy Hazard3 card/task is unsupported`.
- [ ] Dodać asercje wyniku.
- Stan obecny: każdy `main()` zwraca `0` niezależnie od wartości `g_*`.
- [ ] Dodać automatyczne porównanie wyników AMD64 i RV32.
- [ ] Dodać bezpieczne sprawdzanie przepełnienia rozmiaru żądania.
- [ ] Sprawdzić wyrównanie buforów używanych jako `HeapBlock`.
- [ ] Nie dereferencjonować wyniku alokacji przed sprawdzeniem `p != NULL`.
## Braki debug
- [ ] K10: dodać jawne checkpointy:
- [ ] `INIT`;
- [ ] `ALLOC_A`;
- [ ] `ALLOC_B`;
- [ ] `FREE_A`;
- [ ] `ALLOC_C`;
- [ ] `ALLOC_REJECTED`;
- [ ] `FREE_B`;
- [ ] `FREE_C`;
- [ ] `DONE`.
- [ ] K10: zapisywać przy checkpointcie:
- [ ] numer zdarzenia;
- [ ] adres bloku;
- [ ] liczbę wolnych bloków;
- [ ] sumę wolnej pamięci;
- [ ] minimum wolnej pamięci;
- [ ] status `RUNNING/PASS/FAIL`.
- [ ] Simulator:
- [ ] breakpoint na funkcji checkpointu;
- [ ] inspekcja listy i pamięci;
- [ ] bez obiecywania watchpointów — szybki stub obsługuje obecnie breakpointy wykonania.
- [ ] RP2350:
- [ ] OpenOCD `target/rp2350-riscv.cfg`;
- [ ] breakpoint `main`;
- [ ] sprzętowy watchpoint na numerze zdarzenia/statusie;
- [ ] porównanie adresów i wyników z symulatorem;
- [ ] Termdebug i DAP na tym samym ELF.
## Braki materiału
- [ ] Zmniejszyć udział prozy.
- [ ] Zastąpić akapity:
- [ ] listami kontrolnymi;
- [ ] tabelami wartości;
- [ ] komendami do skopiowania;
- [ ] punktami zatrzymania GDB;
- [ ] kryteriami zaliczenia.
- [ ] Szablon każdego taska:
- [ ] `Cel` — maksymalnie 3 punkty;
- [ ] `Uruchom` — komendy;
- [ ] `Zatrzymaj` — breakpoint/watchpoint;
- [ ] `Obserwuj` — symbole i pamięć;
- [ ] `Oczekuj` — wartości host/RV32;
- [ ] `Zmień` — jeden eksperyment;
- [ ] `Zaliczenie` — mierzalna checklista.
- [ ] Przenieść pełne listingi C/ASM do dodatku.
- [ ] Pierwsze strony PDF przeznaczyć na kartę prowadzącego i przebieg lekcji.
## Kolejność wznowienia K01
1. Zamknąć wymagania w bezpośrednim poprzedniku `inf/structures`.
2. Dodać testy wyniku do K01.
3. Dodać kontrakt `stem-card.yaml`.
4. Uruchomić 10/10 tasków na Hazard3 RTL.
5. Dodać checkpointy K10.
6. Zbudować K10 dla `rp2350-rv`.
7. Wgrać i debugować K10 przez JTAG.
8. Przebudować README/PDF do formatu list-first.
9. Wykonać końcowy review techniczny i dydaktyczny.
## Bezpośredni poprzednik
- Seria: `inf`.
- Karta: `structures`.
- Repozytorium: `lab-rv32i-c-structures`.
- Przejście wymagane przed K01:
- [ ] `struct` i `typedef`;
- [ ] struktura samoreferencyjna;
- [ ] pole `next`;
- [ ] przejście po liście;
- [ ] wstawianie elementu;
- [ ] wartownik;
- [ ] `sizeof`, padding i wyrównanie na AMD64/RV32;
- [ ] niezmienniki listy;
- [ ] obserwacja w GDB.