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

 
 
 
Reply to this topicStart new topic
> выделение памяти на c55, MEM_alloc неправильно резервирует память
Ravnoznachnost
сообщение Apr 23 2007, 12:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 36
Регистрация: 28-04-06
Пользователь №: 16 571



Добрый день, возможно кто-то сталкивался с тем, что происходит у меня.

Код пишется на отладочной плате TMS320VC5510 DSK используется CCS v 2.12.07.
В Вижуал Линкере определено распределение памяти, выделен сегмент под кучу.
Выделение памяти осуществляется с использованием MEM_alloc. После вотрого вызова MEM_alloc резервируется не запрошенный объем памяти, а все что осталось в куче. Как с этим бороться? Возможно необходима какая то инициализация рабты с кучей, хотя в примерах и доках ничего подобного нет.

Еще замечена такая аномалия, в самом начале, даже если вызовов MEM_alloc не производилось 4 MADU уже под что то выделены, хотя может это так и должно быть.
Go to the top of the page
 
+Quote Post
evg123
сообщение Apr 24 2007, 12:19
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 353
Регистрация: 11-09-06
Из: Минск
Пользователь №: 20 282



Цитата(Ravnoznachnost @ Apr 23 2007, 12:58) *
Добрый день, возможно кто-то сталкивался с тем, что происходит у меня.

Код пишется на отладочной плате TMS320VC5510 DSK используется CCS v 2.12.07.
В Вижуал Линкере определено распределение памяти, выделен сегмент под кучу.
Выделение памяти осуществляется с использованием MEM_alloc. После вотрого вызова MEM_alloc резервируется не запрошенный объем памяти, а все что осталось в куче. Как с этим бороться? Возможно необходима какая то инициализация рабты с кучей, хотя в примерах и доках ничего подобного нет.

Еще замечена такая аномалия, в самом начале, даже если вызовов MEM_alloc не производилось 4 MADU уже под что то выделены, хотя может это так и должно быть.

Я работал с MEM_alloc CCS3.1 - проблем не возникало. Предварительно в конфигураторе DSP/BIOS - указывал флажок создания кучи такого-то объёма. Использовал сегмент SARAM. Если не устанавить этот флажок, то результат операции был MEM_ILLEGAL.
Вот фрагмент программы:
//--------------------
HostDataElem *HDElem=NULL;

HDElem = MEM_alloc(SARAM, sizeof(HostDataElem), 0); //данные не выровнены
if(HDElem == MEM_ILLEGAL) //если куча полная
{
FlagQueFull++; //флаг: очередь полна (может уст. двумя потоками, кот. пишут в очередь)
SEM_pend(&SEM_QueNotFull, SYS_FOREVER); //Жду
HDElem = MEM_alloc(SARAM, sizeof(HostDataElem), 0); //данные не выровнены
if(HDElem == MEM_ILLEGAL) //если очередь полная
LOG_printf(&LOG_trace,"TSBK_sendToQue: FATAL ERROR");
}
//--------------------
С вашей версией не работал.

Сообщение отредактировал evg123 - Apr 24 2007, 12:20
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st June 2025 - 12:28
Рейтинг@Mail.ru


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