]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Source/event_groups.c
Add xEventGroupClearBitsFromISR() and xEventGroupGetBitsFromISR() functions.
[freertos] / FreeRTOS / Source / event_groups.c
index c5017caf0626ab9992b528ec319f1aeca82ce2b6..b192976aca42b425201aecea9114c5ac2cd3a0ad 100644 (file)
@@ -87,8 +87,8 @@ privileged Vs unprivileged linkage and placement. */
        #error configUSE_TIMERS must be set to 1 to make the xEventGroupSetBitFromISR() function available.\r
 #endif\r
 \r
-#if ( INCLUDE_xEventGroupSetBitFromISR == 1 ) && ( INCLUDE_xTimerPendCallbackFromISR == 0 )\r
-       #error INCLUDE_xTimerPendCallbackFromISR must also be set to one to make the xEventGroupSetBitFromISR() function available.\r
+#if ( INCLUDE_xEventGroupSetBitFromISR == 1 ) && ( INCLUDE_xTimerPendFunctionCallFromISR == 0 )\r
+       #error INCLUDE_xTimerPendFunctionCallFromISR must also be set to one to make the xEventGroupSetBitFromISR() function available.\r
 #endif\r
 \r
 /* The following bit fields convey control information in a task's event list\r
@@ -424,6 +424,33 @@ EventBits_t uxReturn;
 }\r
 /*-----------------------------------------------------------*/\r
 \r
+EventBits_t xEventGroupClearBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear )\r
+{\r
+UBaseType_t uxSavedInterruptStatus;\r
+EventGroup_t *pxEventBits = ( EventGroup_t * ) xEventGroup;\r
+EventBits_t uxReturn;\r
+\r
+       /* Check the user is not attempting to clear the bits used by the kernel\r
+       itself. */\r
+       configASSERT( ( uxBitsToClear & eventEVENT_BITS_CONTROL_BYTES ) == 0 );\r
+\r
+       uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();\r
+       {\r
+               traceEVENT_GROUP_CLEAR_BITS_FROM_ISR( xEventGroup, uxBitsToClear );\r
+\r
+               /* The value returned is the event group value prior to the bits being\r
+               cleared. */\r
+               uxReturn = pxEventBits->uxEventBits;\r
+\r
+               /* Clear the bits. */\r
+               pxEventBits->uxEventBits &= ~uxBitsToClear;\r
+       }\r
+       portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );\r
+\r
+       return uxReturn;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
 EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet )\r
 {\r
 ListItem_t *pxListItem, *pxNext;\r