Release candidate - this will be tagged as FreeRTOS V8.2.0rc1 and a zip file provided.

Minor lint changes.
pull/1/head
Richard Barry 10 years ago
parent 5dd77c7aeb
commit 271393b7d9

@ -159,7 +159,7 @@ BaseType_t xHigherPriorityTaskWoken = pdFALSE;
/* Unblock the deferred interrupt handler task if the event was an Rx. */ /* Unblock the deferred interrupt handler task if the event was an Rx. */
if( ( ulStatus & GMAC_RSR_REC ) != 0 ) if( ( ulStatus & GMAC_RSR_REC ) != 0 )
{ {
xTaskNotifyGiveFromISR( xMACEventHandlingTask, &xHigherPriorityTaskWoken ); vTaskNotifyGiveFromISR( xMACEventHandlingTask, &xHigherPriorityTaskWoken );
} }
portEND_SWITCHING_ISR( xHigherPriorityTaskWoken ); portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );

@ -489,7 +489,7 @@ const BaseType_t xCallInterval = pdMS_TO_TICKS( 50 );
/* It is time to 'give' the notification again. */ /* It is time to 'give' the notification again. */
xCallCount = 0; xCallCount = 0;
xTaskNotifyGiveFromISR( xTaskToNotify, NULL ); vTaskNotifyGiveFromISR( xTaskToNotify, NULL );
ulTimerNotificationsSent++; ulTimerNotificationsSent++;
} }
} }

@ -171,26 +171,26 @@ memory. They will not catch data errors caused by incorrect configuration or
use of FreeRTOS.*/ use of FreeRTOS.*/
#if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 ) #if( configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES == 0 )
/* Define the macros to do nothing. */ /* Define the macros to do nothing. */
#define listLIST_ITEM_INTEGRITY_CHECK_VALUE_1 #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE
#define listLIST_ITEM_INTEGRITY_CHECK_VALUE_2 #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE
#define listLIST_INTEGRITY_CHECK_VALUE_1 #define listFIRST_LIST_INTEGRITY_CHECK_VALUE
#define listLIST_INTEGRITY_CHECK_VALUE_2 #define listSECOND_LIST_INTEGRITY_CHECK_VALUE
#define listSET_LIST_ITEM_INTEGRITY_CHECK_1_VALUE( pxItem ) #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )
#define listSET_LIST_ITEM_INTEGRITY_CHECK_2_VALUE( pxItem ) #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem )
#define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ) #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList )
#define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ) #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList )
#define listTEST_LIST_ITEM_INTEGRITY( pxItem ) #define listTEST_LIST_ITEM_INTEGRITY( pxItem )
#define listTEST_LIST_INTEGRITY( pxList ) #define listTEST_LIST_INTEGRITY( pxList )
#else #else
/* Define macros that add new members into the list structures. */ /* Define macros that add new members into the list structures. */
#define listLIST_ITEM_INTEGRITY_CHECK_VALUE_1 TickType_t xListItemIntegrityValue1; #define listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue1;
#define listLIST_ITEM_INTEGRITY_CHECK_VALUE_2 TickType_t xListItemIntegrityValue2; #define listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE TickType_t xListItemIntegrityValue2;
#define listLIST_INTEGRITY_CHECK_VALUE_1 TickType_t xListIntegrityValue1; #define listFIRST_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue1;
#define listLIST_INTEGRITY_CHECK_VALUE_2 TickType_t xListIntegrityValue2; #define listSECOND_LIST_INTEGRITY_CHECK_VALUE TickType_t xListIntegrityValue2;
/* Define macros that set the new structure members to known values. */ /* Define macros that set the new structure members to known values. */
#define listSET_LIST_ITEM_INTEGRITY_CHECK_1_VALUE( pxItem ) ( pxItem )->xListItemIntegrityValue1 = pdINTEGRITY_CHECK_VALUE #define listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) ( pxItem )->xListItemIntegrityValue1 = pdINTEGRITY_CHECK_VALUE
#define listSET_LIST_ITEM_INTEGRITY_CHECK_2_VALUE( pxItem ) ( pxItem )->xListItemIntegrityValue2 = pdINTEGRITY_CHECK_VALUE #define listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem ) ( pxItem )->xListItemIntegrityValue2 = pdINTEGRITY_CHECK_VALUE
#define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ) ( pxList )->xListIntegrityValue1 = pdINTEGRITY_CHECK_VALUE #define listSET_LIST_INTEGRITY_CHECK_1_VALUE( pxList ) ( pxList )->xListIntegrityValue1 = pdINTEGRITY_CHECK_VALUE
#define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ) ( pxList )->xListIntegrityValue2 = pdINTEGRITY_CHECK_VALUE #define listSET_LIST_INTEGRITY_CHECK_2_VALUE( pxList ) ( pxList )->xListIntegrityValue2 = pdINTEGRITY_CHECK_VALUE
@ -206,19 +206,19 @@ use of FreeRTOS.*/
*/ */
struct xLIST_ITEM struct xLIST_ITEM
{ {
listLIST_ITEM_INTEGRITY_CHECK_VALUE_1 /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
configLIST_VOLATILE TickType_t xItemValue; /*< The value being listed. In most cases this is used to sort the list in descending order. */ configLIST_VOLATILE TickType_t xItemValue; /*< The value being listed. In most cases this is used to sort the list in descending order. */
struct xLIST_ITEM * configLIST_VOLATILE pxNext; /*< Pointer to the next ListItem_t in the list. */ struct xLIST_ITEM * configLIST_VOLATILE pxNext; /*< Pointer to the next ListItem_t in the list. */
struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; /*< Pointer to the previous ListItem_t in the list. */ struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; /*< 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. */ 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. */
void * configLIST_VOLATILE pvContainer; /*< Pointer to the list in which this list item is placed (if any). */ void * configLIST_VOLATILE pvContainer; /*< Pointer to the list in which this list item is placed (if any). */
listLIST_ITEM_INTEGRITY_CHECK_VALUE_2 /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ listSECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
}; };
typedef struct xLIST_ITEM ListItem_t; /* For some reason lint wants this as two separate definitions. */ typedef struct xLIST_ITEM ListItem_t; /* For some reason lint wants this as two separate definitions. */
struct xMINI_LIST_ITEM struct xMINI_LIST_ITEM
{ {
listLIST_ITEM_INTEGRITY_CHECK_VALUE_1 /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ listFIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
configLIST_VOLATILE TickType_t xItemValue; configLIST_VOLATILE TickType_t xItemValue;
struct xLIST_ITEM * configLIST_VOLATILE pxNext; struct xLIST_ITEM * configLIST_VOLATILE pxNext;
struct xLIST_ITEM * configLIST_VOLATILE pxPrevious; struct xLIST_ITEM * configLIST_VOLATILE pxPrevious;
@ -230,11 +230,11 @@ typedef struct xMINI_LIST_ITEM MiniListItem_t;
*/ */
typedef struct xLIST typedef struct xLIST
{ {
listLIST_INTEGRITY_CHECK_VALUE_1 /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ listFIRST_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
configLIST_VOLATILE UBaseType_t uxNumberOfItems; configLIST_VOLATILE UBaseType_t uxNumberOfItems;
ListItem_t * configLIST_VOLATILE pxIndex; /*< Used to walk through the list. Points to the last item returned by a call to listGET_OWNER_OF_NEXT_ENTRY (). */ ListItem_t * configLIST_VOLATILE pxIndex; /*< Used to walk through the list. Points to the last item returned by a call to listGET_OWNER_OF_NEXT_ENTRY (). */
MiniListItem_t xListEnd; /*< 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. */ MiniListItem_t xListEnd; /*< 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. */
listLIST_INTEGRITY_CHECK_VALUE_2 /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ listSECOND_LIST_INTEGRITY_CHECK_VALUE /*< Set to a known value if configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
} List_t; } List_t;
/* /*

@ -147,7 +147,7 @@ typedef enum
/* Actions that can be performed when vTaskNotify() is called. */ /* Actions that can be performed when vTaskNotify() is called. */
typedef enum typedef enum
{ {
eNoAction, /* Notify the task without updating its notify value. */ eNoAction = 0, /* Notify the task without updating its notify value. */
eSetBits, /* Set bits in the task's notification value. */ eSetBits, /* Set bits in the task's notification value. */
eIncrement, /* Increment the task's notification value. */ eIncrement, /* Increment the task's notification value. */
eSetValueWithOverwrite, /* Set the task's notification value to a specific value even if the previous value has not yet been read by the task. */ eSetValueWithOverwrite, /* Set the task's notification value to a specific value even if the previous value has not yet been read by the task. */
@ -1410,8 +1410,8 @@ void vTaskGetRunTimeStats( char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e9
* task. h * task. h
* <PRE>BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction );</PRE> * <PRE>BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction );</PRE>
* *
* configUSE_TASK_NOTIFICATIONS must be defined as 1 for this function to be * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this
* available. * function to be available.
* *
* When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private
* "notification value", which is a 32-bit unsigned integer (uint32_t). * "notification value", which is a 32-bit unsigned integer (uint32_t).
@ -1433,14 +1433,11 @@ void vTaskGetRunTimeStats( char *pcWriteBuffer ) PRIVILEGED_FUNCTION; /*lint !e9
* (unblocked) and the notification cleared. * (unblocked) and the notification cleared.
* *
* A task can use xTaskNotifyWait() to [optionally] block to wait for a * A task can use xTaskNotifyWait() to [optionally] block to wait for a
* notification to be pending, or xTaskNotifyTake() to [optionally] block * notification to be pending, or ulTaskNotifyTake() to [optionally] block
* to wait for its notification value to have a non-zero value. The task does * to wait for its notification value to have a non-zero value. The task does
* not consume any CPU time while it is in the Blocked state. * not consume any CPU time while it is in the Blocked state.
* *
* See http://www.FreeRTOS.org/RTOS_task_notifications.html for details of when * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details.
* it is best to use a task notification to send an event to a task compared to
* when it is best to use an intermediary object (such as a queue, semaphore,
* mutex or event group) to send an event to a task.
* *
* @param xTaskToNotify The handle of the task being notified. The handle to a * @param xTaskToNotify The handle of the task being notified. The handle to a
* task can be returned from the xTaskCreate() API function used to create the * task can be returned from the xTaskCreate() API function used to create the
@ -1490,8 +1487,8 @@ BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAct
* task. h * task. h
* <PRE>BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, BaseType_t *pxHigherPriorityTaskWoken );</PRE> * <PRE>BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction, BaseType_t *pxHigherPriorityTaskWoken );</PRE>
* *
* configUSE_TASK_NOTIFICATIONS must be defined as 1 for this function to be * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this
* available. * function to be available.
* *
* When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private
* "notification value", which is a 32-bit unsigned integer (uint32_t). * "notification value", which is a 32-bit unsigned integer (uint32_t).
@ -1516,14 +1513,11 @@ BaseType_t xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAct
* (unblocked) and the notification cleared. * (unblocked) and the notification cleared.
* *
* A task can use xTaskNotifyWait() to [optionally] block to wait for a * A task can use xTaskNotifyWait() to [optionally] block to wait for a
* notification to be pending, or xTaskNotifyTake() to [optionally] block * notification to be pending, or ulTaskNotifyTake() to [optionally] block
* to wait for its notification value to have a non-zero value. The task does * to wait for its notification value to have a non-zero value. The task does
* not consume any CPU time while it is in the Blocked state. * not consume any CPU time while it is in the Blocked state.
* *
* See http://www.FreeRTOS.org/RTOS_task_notifications.html for details of when * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details.
* it is best to use a task notification to send an event to a task compared to
* when it is best to use an intermediary object (such as a queue, semaphore,
* mutex or event group) to send an event to a task.
* *
* @param xTaskToNotify The handle of the task being notified. The handle to a * @param xTaskToNotify The handle of the task being notified. The handle to a
* task can be returned from the xTaskCreate() API function used to create the * task can be returned from the xTaskCreate() API function used to create the
@ -1580,10 +1574,10 @@ BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNo
/** /**
* task. h * task. h
* <PRE>BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, BaseType_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait );</pre> * <PRE>BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait );</pre>
* *
* configUSE_TASK_NOTIFICATIONS must be defined as 1 for this function to be * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this
* available. * function to be available.
* *
* When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private
* "notification value", which is a 32-bit unsigned integer (uint32_t). * "notification value", which is a 32-bit unsigned integer (uint32_t).
@ -1605,14 +1599,11 @@ BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNo
* (unblocked) and the notification cleared. * (unblocked) and the notification cleared.
* *
* A task can use xTaskNotifyWait() to [optionally] block to wait for a * A task can use xTaskNotifyWait() to [optionally] block to wait for a
* notification to be pending, or xTaskNotifyTake() to [optionally] block * notification to be pending, or ulTaskNotifyTake() to [optionally] block
* to wait for its notification value to have a non-zero value. The task does * to wait for its notification value to have a non-zero value. The task does
* not consume any CPU time while it is in the Blocked state. * not consume any CPU time while it is in the Blocked state.
* *
* See http://www.FreeRTOS.org/RTOS_task_notifications.html for details of when * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details.
* it is best to use a task notification to send an event to a task compared to
* when it is best to use an intermediary object (such as a queue, semaphore,
* mutex or event group) to send an event to a task.
* *
* @param ulBitsToClearOnEntry Bits that are set in ulBitsToClearOnEntry value * @param ulBitsToClearOnEntry Bits that are set in ulBitsToClearOnEntry value
* will be cleared in the calling task's notification value before the task * will be cleared in the calling task's notification value before the task
@ -1654,14 +1645,14 @@ BaseType_t xTaskNotifyFromISR( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNo
* \defgroup xTaskNotifyWait xTaskNotifyWait * \defgroup xTaskNotifyWait xTaskNotifyWait
* \ingroup TaskNotifications * \ingroup TaskNotifications
*/ */
BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, BaseType_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ); BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait );
/** /**
* task. h * task. h
* <PRE>BaseType_t xTaskNotifyGive( TaskHandle_t xTaskHandle, BaseType_t *pxHigherPriorityTaskWoken ); * <PRE>BaseType_t xTaskNotifyGive( TaskHandle_t xTaskToNotify );</PRE>
* *
* configUSE_TASK_NOTIFICATIONS must be defined as 1 for this macro to be * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this macro
* available. * to be available.
* *
* When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private
* "notification value", which is a 32-bit unsigned integer (uint32_t). * "notification value", which is a 32-bit unsigned integer (uint32_t).
@ -1687,7 +1678,7 @@ BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, BaseType_t ulBitsToCl
* using the ulTaskNotificationTake() API function rather than the * using the ulTaskNotificationTake() API function rather than the
* xTaskNotifyWait() API function. * xTaskNotifyWait() API function.
* *
* See http://www.FreeRTOS.org/RTOS_task_notifications.html for more details. * See http://www.FreeRTOS.org/RTOS-task-notifications.html for more details.
* *
* @param xTaskToNotify The handle of the task being notified. The handle to a * @param xTaskToNotify The handle of the task being notified. The handle to a
* task can be returned from the xTaskCreate() API function used to create the * task can be returned from the xTaskCreate() API function used to create the
@ -1704,10 +1695,10 @@ BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, BaseType_t ulBitsToCl
/** /**
* task. h * task. h
* <PRE>BaseType_t xTaskNotifyGiveFromISR( TaskHandle_t xTaskHandle, BaseType_t *pxHigherPriorityTaskWoken ); * <PRE>void vTaskNotifyGiveFromISR( TaskHandle_t xTaskHandle, BaseType_t *pxHigherPriorityTaskWoken );
* *
* configUSE_TASK_NOTIFICATIONS must be defined as 1 for this macro to be * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this macro
* available. * to be available.
* *
* When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private
* "notification value", which is a 32-bit unsigned integer (uint32_t). * "notification value", which is a 32-bit unsigned integer (uint32_t).
@ -1725,47 +1716,44 @@ BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, BaseType_t ulBitsToCl
* task notifications can be used to send data to a task, or be used as light * task notifications can be used to send data to a task, or be used as light
* weight and fast binary or counting semaphores. * weight and fast binary or counting semaphores.
* *
* xTaskNotifyGiveFromISR() is a helper macro intended for use when task * vTaskNotifyGiveFromISR() is intended for use when task notifications are
* notifications are used as light weight and faster binary or counting * used as light weight and faster binary or counting semaphore equivalents.
* semaphore equivalents. Actual FreeRTOS semaphores are given from an ISR * Actual FreeRTOS semaphores are given from an ISR using the
* using the xSemaphoreGiveFromISR() API function, the equivalent action that * xSemaphoreGiveFromISR() API function, the equivalent action that instead uses
* instead uses a task notification is xTaskNotifyGiveFromISR(). * a task notification is vTaskNotifyGiveFromISR().
* *
* When task notifications are being used as a binary or counting semaphore * When task notifications are being used as a binary or counting semaphore
* equivalent then the task being notified should wait for the notification * equivalent then the task being notified should wait for the notification
* using the ulTaskNotificationTake() API function rather than the * using the ulTaskNotificationTake() API function rather than the
* xTaskNotifyWait() API function. * xTaskNotifyWait() API function.
* *
* See http://www.FreeRTOS.org/RTOS_task_notifications.html for more details. * See http://www.FreeRTOS.org/RTOS-task-notifications.html for more details.
* *
* @param xTaskToNotify The handle of the task being notified. The handle to a * @param xTaskToNotify The handle of the task being notified. The handle to a
* task can be returned from the xTaskCreate() API function used to create the * task can be returned from the xTaskCreate() API function used to create the
* task, and the handle of the currently running task can be obtained by calling * task, and the handle of the currently running task can be obtained by calling
* xTaskGetCurrentTaskHandle(). * xTaskGetCurrentTaskHandle().
* *
* @param pxHigherPriorityTaskWoken xTaskNotifyGiveFromISR() will set * @param pxHigherPriorityTaskWoken vTaskNotifyGiveFromISR() will set
* *pxHigherPriorityTaskWoken to pdTRUE if sending the notification caused the * *pxHigherPriorityTaskWoken to pdTRUE if sending the notification caused the
* task to which the notification was sent to leave the Blocked state, and the * task to which the notification was sent to leave the Blocked state, and the
* unblocked task has a priority higher than the currently running task. If * unblocked task has a priority higher than the currently running task. If
* xTaskNotifyGiveFromISR() sets this value to pdTRUE then a context switch * vTaskNotifyGiveFromISR() sets this value to pdTRUE then a context switch
* should be requested before the interrupt is exited. How a context switch is * should be requested before the interrupt is exited. How a context switch is
* requested from an ISR is dependent on the port - see the documentation page * requested from an ISR is dependent on the port - see the documentation page
* for the port in use. * for the port in use.
* *
* @return xTaskNotifyGiveFromISR() is a macro that calls xTaskNotifyFromISR()
* with the eAction parameter set to eIncrement - so pdPASS is always returned.
*
* \defgroup xTaskNotifyWait xTaskNotifyWait * \defgroup xTaskNotifyWait xTaskNotifyWait
* \ingroup TaskNotifications * \ingroup TaskNotifications
*/ */
BaseType_t xTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken ); void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken );
/** /**
* task. h * task. h
* <PRE>uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait );</pre> * <PRE>uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait );</pre>
* *
* configUSE_TASK_NOTIFICATIONS must be defined as 1 for this function to be * configUSE_TASK_NOTIFICATIONS must be undefined or defined as 1 for this
* available. * function to be available.
* *
* When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private * When configUSE_TASK_NOTIFICATIONS is set to one each task has its own private
* "notification value", which is a 32-bit unsigned integer (uint32_t). * "notification value", which is a 32-bit unsigned integer (uint32_t).
@ -1784,30 +1772,27 @@ BaseType_t xTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHig
* faster and lighter weight binary or counting semaphore alternative. Actual * faster and lighter weight binary or counting semaphore alternative. Actual
* FreeRTOS semaphores are taken using the xSemaphoreTake() API function, the * FreeRTOS semaphores are taken using the xSemaphoreTake() API function, the
* equivalent action that instead uses a task notification is * equivalent action that instead uses a task notification is
* xTaskNotifyTake(). * ulTaskNotifyTake().
* *
* When a task is using its notification value as a binary or counting semaphore * When a task is using its notification value as a binary or counting semaphore
* other tasks should send notifications to it using the xTaskNotifyGive() * other tasks should send notifications to it using the xTaskNotifyGive()
* macro, or xTaskNotify() function with the eAction parameter set to * macro, or xTaskNotify() function with the eAction parameter set to
* eIncrement. * eIncrement.
* *
* xTaskNotifyTake() can either clear the task's notification value to * ulTaskNotifyTake() can either clear the task's notification value to
* zero on exit, in which case the notification value acts like a binary * zero on exit, in which case the notification value acts like a binary
* semaphore, or decrement the task's notification value on exit, in which case * semaphore, or decrement the task's notification value on exit, in which case
* the notification value acts like a counting semaphore. * the notification value acts like a counting semaphore.
* *
* A task can use xTaskNotifyTake() to [optionally] block to wait for a * A task can use ulTaskNotifyTake() to [optionally] block to wait for a
* the tasks notification value to be non-zero. The task does not consume any * the task's notification value to be non-zero. The task does not consume any
* CPU time while it is in the Blocked state. * CPU time while it is in the Blocked state.
* *
* Where as xTaskNotifyWait() will return when a notification is pending, * Where as xTaskNotifyWait() will return when a notification is pending,
* xTaskNotifyTake() will return when the task's notification value is * ulTaskNotifyTake() will return when the task's notification value is
* not zero. * not zero.
* *
* See http://www.FreeRTOS.org/RTOS_task_notifications.html for details of when * See http://www.FreeRTOS.org/RTOS-task-notifications.html for details.
* it is best to use a task notification to send an event to a task compared to
* when it is best to use an intermediary object (such as a queue, semaphore,
* mutex or event group) to send an event to a task.
* *
* @param xClearCountOnExit if xClearCountOnExit is pdFALSE then the task's * @param xClearCountOnExit if xClearCountOnExit is pdFALSE then the task's
* notification value is decremented when the function exits. In this way the * notification value is decremented when the function exits. In this way the
@ -1819,7 +1804,7 @@ BaseType_t xTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHig
* @param xTicksToWait The maximum amount of time that the task should wait in * @param xTicksToWait The maximum amount of time that the task should wait in
* the Blocked state for the task's notification value to be greater than zero, * the Blocked state for the task's notification value to be greater than zero,
* should the count not already be greater than zero when * should the count not already be greater than zero when
* xTaskNotifyTake() was called. The task will not consume any processing * ulTaskNotifyTake() was called. The task will not consume any processing
* time while it is in the Blocked state. This is specified in kernel ticks, * time while it is in the Blocked state. This is specified in kernel ticks,
* the macro pdMS_TO_TICSK( value_in_ms ) can be used to convert a time * the macro pdMS_TO_TICSK( value_in_ms ) can be used to convert a time
* specified in milliseconds to a time specified in ticks. * specified in milliseconds to a time specified in ticks.

@ -134,8 +134,8 @@ void vListInitialiseItem( ListItem_t * const pxItem )
/* Write known values into the list item if /* Write known values into the list item if
configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */ configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES is set to 1. */
listSET_LIST_ITEM_INTEGRITY_CHECK_1_VALUE( pxItem ); listSET_FIRST_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
listSET_LIST_ITEM_INTEGRITY_CHECK_2_VALUE( pxItem ); listSET_SECOND_LIST_ITEM_INTEGRITY_CHECK_VALUE( pxItem );
} }
/*-----------------------------------------------------------*/ /*-----------------------------------------------------------*/

@ -147,7 +147,7 @@ functions but without including stdio.h here. */
/* Value that can be assigned to the eNotifyState member of the TCB. */ /* Value that can be assigned to the eNotifyState member of the TCB. */
typedef enum typedef enum
{ {
eNotWaitingNotification, eNotWaitingNotification = 0,
eWaitingNotification, eWaitingNotification,
eNotified eNotified
} eNotifyValue; } eNotifyValue;
@ -3846,7 +3846,7 @@ TickType_t uxReturn;
/* Mark this task as waiting for a notification. */ /* Mark this task as waiting for a notification. */
pxCurrentTCB->eNotifyState = eWaitingNotification; pxCurrentTCB->eNotifyState = eWaitingNotification;
if( xTicksToWait > 0 ) if( xTicksToWait > ( TickType_t ) 0 )
{ {
/* The task is going to block. First it must be removed /* The task is going to block. First it must be removed
from the ready list. */ from the ready list. */
@ -3915,7 +3915,7 @@ TickType_t uxReturn;
{ {
ulReturn = pxCurrentTCB->ulNotifiedValue; ulReturn = pxCurrentTCB->ulNotifiedValue;
if( ulReturn != 0 ) if( ulReturn != 0UL )
{ {
if( xClearCountOnExit != pdFALSE ) if( xClearCountOnExit != pdFALSE )
{ {
@ -3943,7 +3943,7 @@ TickType_t uxReturn;
#if( configUSE_TASK_NOTIFICATIONS == 1 ) #if( configUSE_TASK_NOTIFICATIONS == 1 )
BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, BaseType_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait ) BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit, uint32_t *pulNotificationValue, TickType_t xTicksToWait )
{ {
TickType_t xTimeToWake; TickType_t xTimeToWake;
BaseType_t xReturn; BaseType_t xReturn;
@ -3961,7 +3961,7 @@ TickType_t uxReturn;
/* Mark this task as waiting for a notification. */ /* Mark this task as waiting for a notification. */
pxCurrentTCB->eNotifyState = eWaitingNotification; pxCurrentTCB->eNotifyState = eWaitingNotification;
if( xTicksToWait > 0 ) if( xTicksToWait > ( TickType_t ) 0 )
{ {
/* The task is going to block. First it must be removed /* The task is going to block. First it must be removed
from the ready list. */ from the ready list. */
@ -4105,7 +4105,7 @@ TickType_t uxReturn;
} }
break; break;
default : case eNoAction:
/* The task is being notified without its notify value being /* The task is being notified without its notify value being
updated. */ updated. */
break; break;
@ -4209,7 +4209,7 @@ TickType_t uxReturn;
} }
break; break;
default : case eNoAction :
/* The task is being notified without its notify value being /* The task is being notified without its notify value being
updated. */ updated. */
break; break;
@ -4260,11 +4260,10 @@ TickType_t uxReturn;
#if( configUSE_TASK_NOTIFICATIONS == 1 ) #if( configUSE_TASK_NOTIFICATIONS == 1 )
BaseType_t xTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken ) void vTaskNotifyGiveFromISR( TaskHandle_t xTaskToNotify, BaseType_t *pxHigherPriorityTaskWoken )
{ {
TCB_t * pxTCB; TCB_t * pxTCB;
eNotifyValue eOriginalNotifyState; eNotifyValue eOriginalNotifyState;
BaseType_t xReturn = pdPASS;
UBaseType_t uxSavedInterruptStatus; UBaseType_t uxSavedInterruptStatus;
configASSERT( xTaskToNotify ); configASSERT( xTaskToNotify );
@ -4333,8 +4332,6 @@ TickType_t uxReturn;
} }
} }
portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus ); portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
return xReturn;
} }
#endif /* configUSE_TASK_NOTIFICATIONS */ #endif /* configUSE_TASK_NOTIFICATIONS */

Loading…
Cancel
Save