В настоящее время я оцениваю embOS от SEGGER, работающего на Cortex M4F. Он имеет 128 килобайт внутренней памяти и 2 мегабайта внешней памяти, поэтому я знаю, что у меня много памяти.Встраиваемые RTOS и использование malloc/free
В моей программе используются динамические распределения (да, я знаю, что это не рекомендуется для встроенных систем).
При запуске моей задачи я пытаюсь позвонить malloc/OS_malloc
, где OS_malloc
- это потокобезопасная версия, предоставляемая embOS. В обоих случаях malloc
не удалось и вернул указатель NULL.
При выполнении же 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();
Я пошел и попытался использовать УКО из Micrium, и я вижу такое же поведение. Любые идеи, почему это происходит?
Это была бы одна из тех вещей, на которые разработчики ОС должны были ответить - или вам придется посмотреть исходный код ОС для malloc. Я очень удивлен тем, что malloc «работает», прежде чем вы правильно инициализировали ОС. –
Нас угадывает все очень хорошо, но на самом деле вам нужно взглянуть на то, что на самом деле выделяется, и, возможно, использовать отладчик, чтобы узнать, почему malloc не доволен. – ams
Кроме того, вы проверили 'errno'? – ams