Встроенная ОСРВ и использование malloc / free

В настоящее время я оцениваю embOS от SEGGER, работающей на Cortex M4F. Он имеет 128 килобайт внутренней памяти и 2 мегабайта внешней памяти, так что я знаю, что у меня достаточно памяти.

Моя программа использует некоторые динамические распределения (да, я знаю, что это не рекомендуется во встроенных системах).

При запуске своей задачи я пытаюсь позвонить malloc/OS_malloc, где OS_malloc является потокобезопасной версией, предоставляемой из embOS. В обоих случаях, malloc не удалось и вернул нулевой указатель.

Делая то же самое malloc/OS_malloc до запуска ОС она работает правильно:

**//Malloc here does not fail**
OS_IncDI();                      /* Initially disable interrupts  */
**//Malloc here does not fail**
OS_InitKern();                   /* Initialize OS                  */
**//Malloc here does  fail !!**
OS_InitHW();                     /* Initialize Hardware for OS    */

OS_CREATETASK(&TCBHP, "My Task", HPTask, 50, StackHP); //**<--And off course malloc failes inside teh task also**

OS_Start();

Я пошел и попытался использовать UCOS от MICRIUM, и я вижу то же самое поведение. Есть идеи, почему это происходит?

0

Решение

malloc может вернуть ошибку в следующем состоянии

1)Running out of memory но как ты сказал у меня много памяти так что это не тот случай.

2)malloc is not able to allocate contiguous memory of requested size,

Я думаю, вариант 2 отвечает за ваше дело.

1

Другие решения

Я думаю, что я нахожусь на пути решения проблемы.

кажется, что установка в скрипте компоновщика:

_Min_Heap_Size = 0x19000; / * необходимое количество кучи * /
_Min_Stack_Size = 0x200; / * необходимое количество стека * /

вместо :

_Min_Heap_Size = 0x00; / * необходимое количество кучи * /
_Min_Stack_Size = 0x200; / * необходимое количество стека * /

0

По вопросам рекламы [email protected]