Не знаю, что там с FreeRTOS, но под UCOS malloc() нормально работает, правда, без MPU. А в соответствии с критериями safety-critical system динамическое выделение памяти может использоваться ? Нужно на ходу создать объект, а памяти уже и нету. И куда ваша safety-critical system полетит ?
"задачи должны работать в пользовательском режиме". В едином адресном пространстве, так как MMU нет. Это не задачи, это потоки в пределах одного приложения. Любой поток ("задача") может по-наглому записать значение по произвольному адресу памяти, или вызвать функцию по любому адресу.
И сильно этот MPU защитит систему от раздолбая-программиста ?