# 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 warunkowy `printf`. - `task10_heap4_demo.c` - mini-demonstracja `malloc/free` bez 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](../README.md). 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 ```bash RV_ENV_ROOT=~/dev/workspace/rv/tools/rv32i-hazard3-student-env make tasks make host ``` ## Praca przez rvctl ```bash ./rvctl series cards fetch inf heap4 ./rvctl card use inf heap4 ./rvctl tasks list ./rvctl debug rv32i 1 ```