FreeRTOS heap_4: почему я перестал его бояться

Долго я избегал динамической памяти в прошивках. Потом разобрался с heap_4 и расслабился.

Чего я боялся

Фрагментация. Долгая работа → дыры в памяти → malloc возвращает NULL → паника.

Что я понял про heap_4

Он сливает соседние свободные блоки при free. Это решает 80% проблем фрагментации. Если вы не делаете продолжительные аллокации разного размера в перемешку с короткоживущими аллокациями — фрагментация не страшна.

Как использую

  • все «продолжительные» структуры аллоцирую при старте, один раз
  • короткоживущие — pvPortMalloc/vPortFree в одном месте
  • включён configCHECK_FOR_STACK_OVERFLOW и custom vApplicationMallocFailedHook

Год в production — ни одного malloc-fail.

← в архив · → в ленту