ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
528288 Топик полностью
Codavr (07.07.2014 12:47 - 12:51, просмотров: 387) ответил framer на Тады со стеком все должно быть ОК. Вообще-то если где в FreeRtos и есть баги то надо искать в порте платформы и конфигурации. А какой метод выделения памяти? Если heap_3.c тогда это врапер системных (malloc, free) в этом случае может надо чего
Мне тоже не верится в ошибку FreeRTOS, но что вот тут делает xlXList 
static void prvAddCurrentTaskToDelayedList( const TickType_t xTimeToWake )
{
    xList xlXList;
    xListItem xliXListItem;

	/* The list item will be inserted in wake time order. */
	listSET_LIST_ITEM_VALUE( &( pxCurrentTCB->xGenericListItem ), xTimeToWake );

	if( xTimeToWake < xTickCount )
	{
        /* Wake time has overflowed. Place this item in the overflow list. */
        xlXList = *((xList *) pxOverflowDelayedTaskList);
        xliXListItem = *((xListItem *) &( pxCurrentTCB->xGenericListItem ));
        vListInsert( &xlXList, &xliXListItem);
	}
	else
	{
        /* The wake time has not overflowed, so we can use the current block list. */
        xlXList = *((xList *) pxDelayedTaskList);
        xliXListItem = *((xListItem *) &( pxCurrentTCB->xGenericListItem ));
        vListInsert( &xlXList, &xliXListItem);

		/* If the task entering the blocked state was placed at the head of the
		list of blocked tasks then xNextTaskUnblockTime needs to be updated
		too. */
		if( xTimeToWake < xNextTaskUnblockTime )
		{
			xNextTaskUnblockTime = xTimeToWake;
		}
		else
		{
			mtCOVERAGE_TEST_MARKER();
		}
	}
}
void vListInsert( List_t * const pxList, ListItem_t * const pxNewListItem )
{
ListItem_t *pxIterator;
const TickType_t xValueOfInsertion = pxNewListItem->xItemValue;

	/* Insert the new list item into the list, sorted in xItemValue order.

	If the list already contains a list item with the same item value then
	the new list item should be placed after it.  This ensures that TCB's which
	are stored in ready lists (all of which have the same xItemValue value)
	get an equal share of the CPU.  However, if the xItemValue is the same as
	the back marker the iteration loop below will not end.  This means we need
	to guard against this by checking the value first and modifying the
	algorithm slightly if necessary. */
	if( xValueOfInsertion == portMAX_DELAY )
	{
		pxIterator = pxList->xListEnd.pxPrevious;
	}
	else
	{
		/* *** NOTE ***********************************************************
		If you find your application is crashing here then likely causes are:
			1) Stack overflow -
			   see http://www.freerto …overflow-checking.html
			2) Incorrect interrupt priority assignment, especially on Cortex-M3
			   parts where numerically high priority values denote low actual
			   interrupt priories, which can seem counter intuitive.  See
			   configMAX_SYSCALL_INTERRUPT_PRIORITY on http://www.freertos.org/a00110.html
			3) Calling an API function from within a critical section or when
			   the scheduler is suspended, or calling an API function that does
			   not end in "FromISR" from an interrupt.
			4) Using a queue or semaphore before it has been initialised or
			   before the scheduler has been started (are interrupts firing
			   before vTaskStartScheduler() has been called?).
		See http://www.freertos.org/FAQHelp.html for more tips, and ensure
		configASSERT() is defined!  http://www.freerto …0110.html#configASSERT
		**********************************************************************/

		for( pxIterator = ( ListItem_t * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext ) /*lint !e826 !e740 The mini list structure is used as the list end to save RAM.  This is checked and valid. */
		{
			/* There is nothing to do here, we are just iterating to the
			wanted insertion position. */
		}
	}

	pxNewListItem->pxNext = pxIterator->pxNext;
	pxNewListItem->pxNext->pxPrevious = pxNewListItem;
	pxNewListItem->pxPrevious = pxIterator;
	pxIterator->pxNext = pxNewListItem;

	/* Remember which list the item is in.  This allows fast removal of the
	item later. */
	pxNewListItem->pvContainer = ( void * ) pxList;

	( pxList->uxNumberOfItems )++;
}
Долой империалистический интернационал!