FreeRTOS heap_4: почему я перестал его бояться
Долго я избегал динамической памяти в прошивках. Потом разобрался с heap_4 и расслабился.
Чего я боялся
Фрагментация. Долгая работа → дыры в памяти → malloc возвращает NULL → паника.
Что я понял про heap_4
Он сливает соседние свободные блоки при free. Это решает 80% проблем фрагментации. Если вы не делаете продолжительные аллокации разного размера в перемешку с короткоживущими аллокациями — фрагментация не страшна.
Как использую
- все «продолжительные» структуры аллоцирую при старте, один раз
- короткоживущие — pvPortMalloc/vPortFree в одном месте
- включён
configCHECK_FOR_STACK_OVERFLOWи customvApplicationMallocFailedHook
Год в production — ни одного malloc-fail.