Я ищу подсказки по использованию безопасного обработчика динамической памяти в многопоточной системе. Подробности проблемы:
- написанный на C, будет работать на процессоре cortex-M3 с RTOS (ОС CooCox),
- Будет использоваться распределитель памяти TLSF (можно использовать и другие распределители, если я сочту их более подходящими, и они будут бесплатными). и с открытым исходным кодом),
- Решение, которое я ищу, - это использование распределителя памяти, защищенного от задач и прерываний ОС.
До сих пор думал о двух возможных подходах, у обоих есть несколько неизвестных мне подробностей:
- отключать и разрешать прерывания при вызове функций распределителя. Проблема - если я не ошибаюсь, я не могу играть с отключением и включением прерываний в обычном режиме, только в привилегированном режиме (так что, если я не ошибаюсь, это только в прерываниях), мне нужно сделать это также из среды выполнения - для предотвращения прерываний и переключения задач во время работы обработчика памяти.
- распределитель вызовов от SWI. Это еще очень непонятно для меня. 1-й - SWI такой же, как FIQ (если так, то правда ли, что код FIQ нужно писать на ассемблере - так как аллокатор написан на C). Тогда все еще есть небольшие сомнения по поводу вызова FIQ из IRQ (такой сценарий будет происходить, хотя и не часто), но, скорее всего, эта часть не вызовет проблем.
Итак, какие есть идеи о возможных решениях этой ситуации?