70 lines
2.0 KiB
Markdown
70 lines
2.0 KiB
Markdown
# Karta pracy: FreeRTOS `heap_4`
|
|
|
|
Trzy krótkie zadania po kartach `pointers` i `structures`:
|
|
|
|
1. first-fit + split na arenie 256 B;
|
|
2. lista adresowa + scalanie `A | B | C`;
|
|
3. niezmodyfikowany FreeRTOS-Kernel V11.3.0 `heap_4.c`.
|
|
|
|
Task 3 linkuje upstream `portable/MemMang/heap_4.c` z commita
|
|
`9b777ae5c5b8e9e456065a00294d1e5f5f9facf5`.
|
|
|
|
- AMD64: rzeczywisty algorytm + jednowątkowy adapter sekcji krytycznej.
|
|
- Hazard3: `tasks.c`, `list.c`, `heap_4.c` i oficjalny port RISC-V.
|
|
- RP2350: zgodny core+port z forka Raspberry Pi (`4f7299d6ea74`) oraz
|
|
podstawiony stabilny allocator V11.3.0.
|
|
|
|
## Jedno wejście: `stemctl`
|
|
|
|
```bash
|
|
stemctl series cards fetch freertos heap4
|
|
stemctl test native-amd64 freertos heap4 1
|
|
stemctl test hazard3-sim freertos heap4 2
|
|
stemctl debug hazard3-sim freertos heap4 3
|
|
stemctl test rp2350 freertos heap4 3
|
|
stemctl deploy rp2350 freertos heap4 3 --device /dev/bus/usb/BBB/DDD
|
|
stemctl debug rp2350 freertos heap4 3 --device /dev/bus/usb/BBB/DDD
|
|
```
|
|
|
|
- `debug rp2350`: roboczy ELF `no_flash` ładowany do SRAM.
|
|
- `deploy rp2350`: trwały obraz w SPI flash, odczytany przez breakpointy.
|
|
|
|
## Kontrakt zadań
|
|
|
|
| Task | Sprawdza | Wynik kluczowy |
|
|
|---|---|---|
|
|
| 1 | alignment, header, split | `wanted + remainder == 256` |
|
|
| 2 | lista po adresie, coalescing | `2 bloki -> 1 blok`, `96 -> 144 B` |
|
|
| 3 | prawdziwe API FreeRTOS | free wraca do F0, minimum nie rośnie, OOM = NULL |
|
|
|
|
## Debugowanie Task 3
|
|
|
|
Automatyczny start: `heap4_fragmented_checkpoint`.
|
|
|
|
```gdb
|
|
p g_fragmented_stats
|
|
p g_final_stats
|
|
p xFreeBytesRemaining
|
|
p xMinimumEverFreeBytesRemaining
|
|
p xStart
|
|
p pxEnd
|
|
x/160bx ucHeap
|
|
b prvInsertBlockIntoFreeList
|
|
b pvPortMalloc
|
|
b vPortFree
|
|
```
|
|
|
|
W UI: Termdebug po lewej; źródło i listing po prawej; bash pod Neovimem.
|
|
`F5` continue, `F9` breakpoint, `F10` next, `F11` step, `Shift-F11`
|
|
finish, `F8` stepi, `:StudentStack`, `:StudentMemory`, `:StudentLst`.
|
|
|
|
## Test repozytorium
|
|
|
|
```bash
|
|
./tests/test_host.sh
|
|
bash -n tools/card-action.sh
|
|
./scripts/render_pdf.sh
|
|
```
|
|
|
|
Źródło i licencja: [UPSTREAM.md](UPSTREAM.md).
|