Files
lab-rv32i-freertos-heap4/README.md
T
2026-07-14 19:15:20 +02:00

74 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.13.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 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
```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
```