listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE/*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
configLIST_VOLATILETickType_txItemValue;/*< The value being listed. In most cases this is used to sort the list in descending order. */
structxLIST_ITEM*configLIST_VOLATILEpxNext;/*< Pointer to the next ListItem_t in the list. */
structxLIST_ITEM*configLIST_VOLATILEpxPrevious;/*< Pointer to the previous ListItem_t in the list. */
void*pvOwner;/*< Pointer to the object (normally a TCB) that contains the list item. There is therefore a two way link between the object containing the list item and the list item itself. */
structxLIST*configLIST_VOLATILEpxContainer;/*< Pointer to the list in which this list item is placed (if any). */
listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE/*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
};
typedefstructxLIST_ITEMListItem_t;/* For some reason lint wants this as two separate definitions. */
structxMINI_LIST_ITEM
{
listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE/*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
configLIST_VOLATILETickType_txItemValue;
structxLIST_ITEM*configLIST_VOLATILEpxNext;
structxLIST_ITEM*configLIST_VOLATILEpxPrevious;
};
typedefstructxMINI_LIST_ITEMMiniListItem_t;
structxLIST;
structxLIST_ITEM
{
listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE/*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
configLIST_VOLATILETickType_txItemValue;/*< The value being listed. In most cases this is used to sort the list in descending order. */
structxLIST_ITEM*configLIST_VOLATILEpxNext;/*< Pointer to the next ListItem_t in the list. */
structxLIST_ITEM*configLIST_VOLATILEpxPrevious;/*< Pointer to the previous ListItem_t in the list. */
void*pvOwner;/*< Pointer to the object (normally a TCB) that contains the list item. There is therefore a two way link between the object containing the list item and the list item itself. */
structxLIST*configLIST_VOLATILEpxContainer;/*< Pointer to the list in which this list item is placed (if any). */
listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE/*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
};
typedefstructxLIST_ITEMListItem_t;/* For some reason lint wants this as two separate definitions. */
structxMINI_LIST_ITEM
{
listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE/*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
configLIST_VOLATILETickType_txItemValue;
structxLIST_ITEM*configLIST_VOLATILEpxNext;
structxLIST_ITEM*configLIST_VOLATILEpxPrevious;
};
typedefstructxMINI_LIST_ITEMMiniListItem_t;
/*
*Definitionofthetypeofqueueusedbythescheduler.
*/
typedefstructxLIST
{
listFIRST_LIST_INTEGRITY_CHECK_VALUE/*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
volatileUBaseType_tuxNumberOfItems;
ListItem_t*configLIST_VOLATILEpxIndex;/*< Used to walk through the list. Points to the last item returned by a call to listGET_OWNER_OF_NEXT_ENTRY (). */
MiniListItem_txListEnd;/*< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */
listSECOND_LIST_INTEGRITY_CHECK_VALUE/*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
}List_t;
typedefstructxLIST
{
listFIRST_LIST_INTEGRITY_CHECK_VALUE/*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
volatileUBaseType_tuxNumberOfItems;
ListItem_t*configLIST_VOLATILEpxIndex;/*< Used to walk through the list. Points to the last item returned by a call to listGET_OWNER_OF_NEXT_ENTRY (). */
MiniListItem_txListEnd;/*< List item that contains the maximum possible item value meaning it is always at the end of the list and is therefore used as a marker. */
listSECOND_LIST_INTEGRITY_CHECK_VALUE/*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
/* Used by heap_5.c to define the start address and size of each memory region
*thattogethercomprisethetotalFreeRTOSheapspace.*/
typedefstructHeapRegion
{
uint8_t*pucStartAddress;
size_txSizeInBytes;
}HeapRegion_t;
typedefstructHeapRegion
{
uint8_t*pucStartAddress;
size_txSizeInBytes;
}HeapRegion_t;
/* Used to pass information about the heap out of vPortGetHeapStats(). */
typedefstructxHeapStats
{
size_txAvailableHeapSpaceInBytes;/* The total heap size currently available - this is the sum of all the free blocks, not the largest block that can be allocated. */
size_txSizeOfLargestFreeBlockInBytes;/* The maximum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
size_txSizeOfSmallestFreeBlockInBytes;/* The minimum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
size_txNumberOfFreeBlocks;/* The number of free memory blocks within the heap at the time vPortGetHeapStats() is called. */
size_txMinimumEverFreeBytesRemaining;/* The minimum amount of total free memory (sum of all free blocks) there has been in the heap since the system booted. */
size_txNumberOfSuccessfulAllocations;/* The number of calls to pvPortMalloc() that have returned a valid memory block. */
size_txNumberOfSuccessfulFrees;/* The number of calls to vPortFree() that has successfully freed a block of memory. */
}HeapStats_t;
typedefstructxHeapStats
{
size_txAvailableHeapSpaceInBytes;/* The total heap size currently available - this is the sum of all the free blocks, not the largest block that can be allocated. */
size_txSizeOfLargestFreeBlockInBytes;/* The maximum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
size_txSizeOfSmallestFreeBlockInBytes;/* The minimum size, in bytes, of all the free blocks within the heap at the time vPortGetHeapStats() is called. */
size_txNumberOfFreeBlocks;/* The number of free memory blocks within the heap at the time vPortGetHeapStats() is called. */
size_txMinimumEverFreeBytesRemaining;/* The minimum amount of total free memory (sum of all free blocks) there has been in the heap since the system booted. */
size_txNumberOfSuccessfulAllocations;/* The number of calls to pvPortMalloc() that have returned a valid memory block. */
size_txNumberOfSuccessfulFrees;/* The number of calls to vPortFree() that has successfully freed a block of memory. */
constchar*pcQueueGetName(QueueHandle_txQueue)PRIVILEGED_FUNCTION;/*lint !e971 Unqualified char types are allowed for strings and single characters only. */
#endif
#if ( configQUEUE_REGISTRY_SIZE > 0 )
constchar*pcQueueGetName(QueueHandle_txQueue)PRIVILEGED_FUNCTION;/*lint !e971 Unqualified char types are allowed for strings and single characters only. */
constchar*pcTimerGetName(TimerHandle_txTimer)PRIVILEGED_FUNCTION;/*lint !e971 Unqualified char types are allowed for strings and single characters only. */
constchar*pcTimerGetName(TimerHandle_txTimer)PRIVILEGED_FUNCTION;/*lint !e971 Unqualified char types are allowed for strings and single characters only. */
/* TODO FIXME: Is there a check we should do with the xTriggerLevelBytes value ? */
/* With the adjustment to 'xRequiredSpace', the deadlock is avoided, thus it's now feasible. */
xIsFeasible=pdTRUE;
}
else
{
/* It is possible to write the message completely in the buffer. */
xIsFeasible=pdTRUE;
}
}
/* Added check against xIsFeasible. If it's not feasible, don't even wait for notification, let the call to 'prvWriteMessageToBuffer' do nothing and return 0 */