На чистом СИ проще контролировать запросы памяти, запрашивая и освобождая динамическую память последовательно исполняя в один момент времени только одну задачу, тем самым исключив дефрагментацию памяти (аналог выделения памяти в стеке). А FreeRTOS создан для поддержки работы в мультизадачном режиме, что и приводит к дефрагментации памяти. Чтобы этого не произошло необходимо использовать статическую модель памяти. Т.е. переписать части Expessif-IDF...