feat: add interactive FC01 heap4 card
This commit is contained in:
@@ -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 1–2 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
|
||||
|
||||
Reference in New Issue
Block a user