feat: add interactive FC01 heap4 card

This commit is contained in:
user
2026-07-20 12:04:14 +02:00
parent bd34c7ec1e
commit 48eccb5e24
39 changed files with 7744 additions and 210 deletions
+39 -2
View File
@@ -1,11 +1,14 @@
# Karta pracy: FreeRTOS `heap_4`
Trzy krótkie zadania po kartach `pointers` i `structures`:
Trzy programy wspierające kartę po K&R 5.4 oraz `structures`:
1. first-fit + split na arenie 256 B;
1. nagłówek, wyrównanie i geometria splitu na arenie 256 B;
2. lista adresowa + scalanie `A | B | C`;
3. niezmodyfikowany FreeRTOS-Kernel V11.3.0 `heap_4.c`.
W lekcji 30-minutowej programy 12 są demonstracjami z predykcją. Uczeń
debugguje wyłącznie program 3.
Task 3 linkuje upstream `portable/MemMang/heap_4.c` z commita
`9b777ae5c5b8e9e456065a00294d1e5f5f9facf5`.
@@ -14,8 +17,42 @@ Task 3 linkuje upstream `portable/MemMang/heap_4.c` z commita
- RP2350: zgodny core+port z forka Raspberry Pi (`4f7299d6ea74`) oraz
podstawiony stabilny allocator V11.3.0.
## Bezpośrednia kontynuacja K&R 5.4
Lekcja zaczyna się od gotowego projektu z poprzedniej karty:
`allocbuf[64]`, `allocp`, `alloc(5)`, `alloc(7)` oraz offsety
`0 -> 5 -> 12`. Ten alokator:
- nie potrafi zwolnić pierwszego bloku i zachować drugiego;
- nie przechowuje rozmiaru ani stanu zwróconego obszaru;
- nie zapamiętuje i nie wykorzystuje dziur;
- odzyskuje pamięć wyłącznie przez reset całej areny.
FC01 odpowiada na jedno pytanie projektowe: **co trzeba dodać, aby zwalniać
dowolny blok i ponownie wykorzystywać powstałe miejsce?** Odpowiedzią jest
mechanika `heap_4`: nagłówek bloku, lista wolnych bloków uporządkowana po
adresie, first-fit, split oraz scalanie fizycznych sąsiadów.
FreeRTOS udostępnia kilka wymiennych implementacji tego samego API i projekt
linkuje dokładnie jedną. `heap_1`, `heap_2`, `heap_3` i `heap_5` są w tej
karcie tylko jednominutową mapą kontekstu. Cała obserwowana implementacja to
niezmodyfikowany [`heap_4.c` z FreeRTOS-Kernel V11.3.0](https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/V11.3.0/portable/MemMang/heap_4.c).
Lekcja trwa 30 minut. Task 1 i Task 2 są krótkimi demonstracjami z predykcją;
Task 3 jest jedynym centralnym przebiegiem ucznia w debuggerze. Obraz dla
Pico 2 W musi być zbudowany i wgrany przed zajęciami. `heap_4` jest wyborem
linkera projektu, nie sprzętowym mechanizmem RP2350.
## Jedno wejście: `stemctl`
Centralny przebieg lekcji, przygotowany przed wejściem uczniów:
```bash
stemctl debug rp2350 freertos heap4 3 --device /dev/bus/usb/BBB/DDD
```
Pełna weryfikacja repozytorium wykonywana poza 30-minutową lekcją:
```bash
stemctl series cards fetch freertos heap4
stemctl test native-amd64 freertos heap4 1