diff --git a/doc/stan-prac.md b/doc/stan-prac.md new file mode 100644 index 0000000..b29a965 --- /dev/null +++ b/doc/stan-prac.md @@ -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. +