2026-05-07 19:43:33 +02:00
2026-05-02 00:53:25 +02:00
2026-05-07 19:43:33 +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
2026-05-07 19:43:33 +02:00

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 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.

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%