реклама на сайте
подробности

 
 
> malloc и компания, Работа с кучей в FreeRTOS
Terminator
сообщение Oct 10 2007, 01:56
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382



В демке FreeRTOS для sam7 есть три модели распределения памяти:
  1. выделение без освобождения
  2. выделение с освобождением, но без объединения мелких свободных блоков в большой
  3. использование библиотечных malloc, free

Взял за основу демку для sam7. С второй моделью всё работает, а вот с третьей нет, OS крутит задачу idle и всё sad.gif

Смотрел пошаговое выполнение, все выделения памяти выполняются вроде правильно.
Куда копать?

"Среда"
arm-elf-gcc (GCC) 4.1.2
GNU ld version 2.17
newlib-1.15.0
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dron_Gus
сообщение Oct 10 2007, 10:16
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



При запуске задач используется все тот же malloc. Если крутится только idle, значит больше задач нет. Значит при их запуске (например) не выделилось нужного места под стек и т.д. Копайте в сторону настроек кучи. А заодно проверьте, что возвращает xTaskCreate. Я для этого использую такую конструкцию

__inline signed portBASE_TYPE _xTaskCreate( pdTASK_CODE pvTaskCode, const signed portCHAR * const pcName, unsigned portSHORT usStackDepth, void *pvParameters, unsigned portBASE_TYPE uxPriority, xTaskHandle *pxCreatedTask )
{
portBASE_TYPE result;
result = xTaskCreate(pvTaskCode, pcName, usStackDepth, pvParameters, uxPriority, pxCreatedTask );
if ( result != pdPASS )
printf("%s coud not be created\r\n", pcName);
#ifdef DEBUG
else
printf("%s started\r\n", pcName);
#endif
return result;
}


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
Terminator
сообщение Oct 11 2007, 03:07
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382



Цитата(Dron_Gus @ Oct 10 2007, 17:16) *
При запуске задач используется все тот же malloc. Если крутится только idle, значит больше задач нет.

Задачи есть. Если сменить модель выделения памяти на другую, то всё работает.
Цитата
Значит при их запуске (например) не выделилось нужного места под стек и т.д. Копайте в сторону настроек кучи. А заодно проверьте, что возвращает xTaskCreate. Я для этого использую такую конструкцию
...

Пошаговое выполнение смотрел, память выделяется. В случае библиотечных malloc free, никаких настроек кучи нету, только линкер должен определить где кончается занятая память. Я проверял, выделение начинается сразу после последней глобальной переменной.

Походу никто с такой проблемой не сталкивался ...

Придётся выделять память большими одинаковыми кусками.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 11 2007, 08:13
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Terminator @ Oct 11 2007, 06:07) *
память выделяется....

Что-то в ваших словах не сходится - если память выделяется, то никаких причин не работать нет.
Цитата
Походу никто с такой проблемой не сталкивался ...

Не приходило в голову использовать какой-то непонятно реализованный "штатный" malloc(). Пользую свой менеджер использующий всю свободную память, немножко борющийся с дефрагментацией и знающий владельца блока.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Terminator
сообщение Oct 11 2007, 08:24
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382



Цитата(zltigo @ Oct 11 2007, 15:13) *
Что-то в ваших словах не сходится - если память выделяется, то никаких причин не работать нет.

Это точно wacko.gif
Цитата
Не приходило в голову использовать какой-то непонятно реализованный "штатный" malloc().

В доке к newlib он описан.
Цитата
Пользую свой менеджер использующий всю свободную память, немножко борющийся с дефрагментацией и знающий владельца блока.

Не поделитесь? cheers.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 08:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.0137 секунд с 7
ELECTRONIX ©2004-2016