Files
lab-rv32i-freertos-heap4/doc/stan-prac.md
T
2026-07-14 20:00:00 +02:00

4.5 KiB

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

  • make host buduje 10/10 programów.
  • Wszystkie programy hostowe uruchamiają się z kodem 0.
  • make tasks RV_ENV_ROOT=... buduje 10/10 ELF dla RV32I.
  • stemctl test native-amd64 freertos heap4 10 przechodzi.
  • RP2350 Probe jest wykrywany bez sudo po wejściu do grupy rpdebug.
  • OpenOCD wykrywa rp2350.rv0 i rp2350.rv1.
  • 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.