2026-07-14 19:15:20 +02:00
2026-05-02 00:53:25 +02:00
2026-07-14 19:15:20 +02:00
2026-05-02 00:53:25 +02:00
2026-05-02 00:53:25 +02:00
2026-05-02 00:53:25 +02:00
2026-05-02 00:53:25 +02:00
2026-05-02 00:53:25 +02:00

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. 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.13.4. Rozdział o heapie nie ma numerowanego programu z zestawu Example001Example025, dlatego karta rozkłada mechanikę alokatora na własne, krótsze eksperymenty:

  • Taski 0103 odtwarzają mapę bloku, wolną listę i inicjalizację heapu;
  • Taski 0408 izolują wyrównanie, first-fit, podział, wstawianie i scalanie;
  • Task 09 łączy konfigurację z sekcjami 3.1.33.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
S
Description
FC01 — heap_1–heap_5 and heap_4 mechanics
Readme 3.2 MiB
Languages
Shell 37.7%
C 35.8%
Makefile 12.5%
CMake 11.1%
Assembly 1.9%
Other 1%