134 lines
4.5 KiB
Markdown
134 lines
4.5 KiB
Markdown
# 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.
|
|
|