# 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.