rv32i-freertos / heap4
Karta pracy 1/? z serii rv32i-freertos.
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.
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