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

 
 
> pvPortMalloc & vPortFree, зависает в heap2.c
M0HAX
сообщение Dec 7 2010, 08:45
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 22-09-08
Пользователь №: 40 378



Обращаюсь к гуру с просьбой помочь разобраться.
Ситуация такая. Программа зависает либо в процедуре void vPortFree( void *pv ) в
Цитата
prvInsertBlockIntoFreeList( ( ( xBlockLink * ) pxLink ) );
,

либо в процедуре void *pvPortMalloc( size_t xWantedSize ) в цикле
Цитата
while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock ) )
{
pxPreviousBlock = pxBlock;
pxBlock = pxBlock->pxNextFreeBlock;
}


Программа сделана так: в нескольких задачах суется в очередь(элементы очереди - это указатели) ссылка на некую структуру. Эта структура перед занесением в очередь создается с помощью pvPortMalloc.
Если очередь заполнена, то сразу же в этой задаче эта структура освобождает память с помощью vPortFree(void *pv).
Выглядит так,например:
Цитата
pxTestTaskSend = (xSendCadrStruct*)pvPortMalloc(sizeof(xSendCadrStruct));
if (pxTestTaskSend == (xSendCadrStruct*)NULL) GotoGlobalCycleProcedure();

pxTestTaskSend->num = 0xFE;
pxTestTaskSend->ulCnt = 0;
pxTestTaskSend->ulData = (unsigned portCHAR*)pxBufferStat;
xResult = xQueueSendToBack(xSendCadrQueue, (void*)&pxTestTaskSend, 0);
if (xResult == errQUEUE_FULL) vPortFree(pxTestTaskSend);


Если прошло все нормально, то в задаче, которая берет из этой очереди элементы, после разборки данных структуры, уничтожает выделенную память для этой структуры, т.е.
Цитата
xSendCadrStruct *xSendCadr;

for (;;){
xQueueReceive(xSendCadrQueue, &xSendCadr, portMAX_DELAY);
/**/
....... разбор структуры ......
switch (xSendCadr->num){
................
};
/**/
vPortFree(xSendCadr)
};


Вроде как все должно работать: в одном месте выделяется память, в другом - освобождается...
По вашему, где мог ошибиться?
Подскажите способы/наработки, как быстрее и эффективнее найти причину глюка.

PS. В прерываниях не использую void vPortFree( void *pv ) и void *pvPortMalloc( size_t xWantedSize ).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 16th June 2025 - 13:19
Рейтинг@Mail.ru


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