rv32i-freertos / heap4
Karta pracy 01/14 z serii rv32i-freertos; jest opcjonalnym fundamentem L1.
Temat: mechanika alokatora heap_4.c z FreeRTOS-a na małych przykładach
uruchamianych w środowisku RV32I.
Ta karta jest pomostem po kartach C: używa wskaźników, struktur, listy
jednokierunkowej, static, typedef, makr i arytmetyki adresów, ale nie
wymaga jeszcze schedulera, tasków ani przerwań.
Kod w src/tasks jest dydaktycznym modelem zachowania heap_4, a nie kopią
pliku upstream FreeRTOS.
Taski
task01_heap_map.c- mapa pojęć: sterta, blok, nagłówek bloku.task02_free_list.c- lista wolnych bloków.task03_heap_init.c- inicjalizacja sterty i wartownik końca listy.task04_alignment.c- wyrównanie rozmiarów i adresów.task05_malloc_first_fit.c- pierwszy pasujący wolny blok.task06_split_block.c- podział większego bloku.task07_free_insert.c- zwracanie bloku na listę wolnych.task08_coalescing.c- scalanie sąsiednich wolnych bloków.task09_config_macros.c- makra konfiguracyjne i warunkowyprintf.task10_heap4_demo.c- mini-demonstracjamalloc/freebez pełnego RTOS-a.
Hostowe printf jest dostępne tylko przez -DHOST_PRINTF=1; RV32I zapisuje
wyniki w globalnych zmiennych volatile.
Gałęzie zadań
Gałąź deploy jest pełną publiczną wersją karty. Każde zadanie ma osobną
gałąź startową tasks/*, na przykład tasks/05-malloc-first-fit. Taka gałąź
nie jest wycinkiem repozytorium: zawiera dokumentację, treść karty, Makefile,
kod pomocniczy i pliki danego zadania.
Uczeń nie commituje bezpośrednio do tasks/*. W repozytorium klasy tworzy
gałąź pochodną, na przykład students/u01/tasks/05-malloc-first-fit.
Powiązanie z FreeRTOS Book v1.1.0
To jest opcjonalna karta K01 z
mapy serii. Jej źródłem pojęciowym jest rozdział 3 książki
Mastering the FreeRTOS Real Time Kernel, przede wszystkim sekcja 3.2.4 o
heap_4 oraz rysunki 3.1–3.4. Rozdział o heapie nie ma numerowanego programu
z zestawu Example001–Example025, dlatego karta rozkłada mechanikę
alokatora na własne, krótsze eksperymenty:
- Taski 01–03 odtwarzają mapę bloku, wolną listę i inicjalizację heapu;
- Taski 04–08 izolują wyrównanie, first-fit, podział, wstawianie i scalanie;
- Task 09 łączy konfigurację z sekcjami 3.1.3–3.1.5;
- Task 10 składa te elementy w jeden model zachowania
heap_4.
Karta nie jest kopią upstreamowego heap_4.c ani listingów książki. Jest
modelem dydaktycznym, po którym karta K02 przechodzi na prawdziwy plik
portable/MemMang/heap_4.c z FreeRTOS V11.3.0.
Budowanie
RV_ENV_ROOT=~/dev/workspace/rv/tools/rv32i-hazard3-student-env make tasks
make host
Praca przez rvctl
./rvctl series cards fetch inf heap4
./rvctl card use inf heap4
./rvctl tasks list
./rvctl debug rv32i 1