Prusa MINI Firmware overview
event_groups.h File Reference
#include "timers.h"

Go to the source code of this file.

Macros

#define xEventGroupClearBitsFromISR(xEventGroup, uxBitsToClear)   xTimerPendFunctionCallFromISR( vEventGroupClearBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToClear, NULL )
 
#define xEventGroupSetBitsFromISR(xEventGroup, uxBitsToSet, pxHigherPriorityTaskWoken)   xTimerPendFunctionCallFromISR( vEventGroupSetBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToSet, pxHigherPriorityTaskWoken )
 
#define xEventGroupGetBits(xEventGroup)   xEventGroupClearBits( xEventGroup, 0 )
 

Typedefs

typedef voidEventGroupHandle_t
 
typedef TickType_t EventBits_t
 

Functions

PRIVILEGED_FUNCTION EventBits_t xEventGroupWaitBits (EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToWaitFor, const BaseType_t xClearOnExit, const BaseType_t xWaitForAllBits, TickType_t xTicksToWait)
 
PRIVILEGED_FUNCTION EventBits_t xEventGroupClearBits (EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear)
 
PRIVILEGED_FUNCTION EventBits_t xEventGroupSetBits (EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet)
 
PRIVILEGED_FUNCTION EventBits_t xEventGroupSync (EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, const EventBits_t uxBitsToWaitFor, TickType_t xTicksToWait)
 
PRIVILEGED_FUNCTION EventBits_t xEventGroupGetBitsFromISR (EventGroupHandle_t xEventGroup)
 
PRIVILEGED_FUNCTION void vEventGroupDelete (EventGroupHandle_t xEventGroup)
 
PRIVILEGED_FUNCTION void vEventGroupSetBitsCallback (void *pvEventGroup, const uint32_t ulBitsToSet)
 
PRIVILEGED_FUNCTION void vEventGroupClearBitsCallback (void *pvEventGroup, const uint32_t ulBitsToClear)
 

Macro Definition Documentation

◆ xEventGroupClearBitsFromISR

#define xEventGroupClearBitsFromISR (   xEventGroup,
  uxBitsToClear 
)    xTimerPendFunctionCallFromISR( vEventGroupClearBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToClear, NULL )

◆ xEventGroupSetBitsFromISR

#define xEventGroupSetBitsFromISR (   xEventGroup,
  uxBitsToSet,
  pxHigherPriorityTaskWoken 
)    xTimerPendFunctionCallFromISR( vEventGroupSetBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToSet, pxHigherPriorityTaskWoken )

◆ xEventGroupGetBits

#define xEventGroupGetBits (   xEventGroup)    xEventGroupClearBits( xEventGroup, 0 )

Typedef Documentation

◆ EventGroupHandle_t

◆ EventBits_t

Function Documentation

◆ xEventGroupWaitBits()

PRIVILEGED_FUNCTION EventBits_t xEventGroupWaitBits ( EventGroupHandle_t  xEventGroup,
const EventBits_t  uxBitsToWaitFor,
const BaseType_t  xClearOnExit,
const BaseType_t  xWaitForAllBits,
TickType_t  xTicksToWait 
)
325 {
326 EventGroup_t *pxEventBits = ( EventGroup_t * ) xEventGroup;
327 EventBits_t uxReturn, uxControlBits = 0;
328 BaseType_t xWaitConditionMet, xAlreadyYielded;
329 BaseType_t xTimeoutOccurred = pdFALSE;
330 
331  /* Check the user is not attempting to wait on the bits used by the kernel
332  itself, and that at least one bit is being requested. */
333  configASSERT( xEventGroup );
334  configASSERT( ( uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0 );
335  configASSERT( uxBitsToWaitFor != 0 );
336  #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
337  {
338  configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
339  }
340  #endif
341 
342  vTaskSuspendAll();
343  {
344  const EventBits_t uxCurrentEventBits = pxEventBits->uxEventBits;
345 
346  /* Check to see if the wait condition is already met or not. */
347  xWaitConditionMet = prvTestWaitCondition( uxCurrentEventBits, uxBitsToWaitFor, xWaitForAllBits );
348 
349  if( xWaitConditionMet != pdFALSE )
350  {
351  /* The wait condition has already been met so there is no need to
352  block. */
353  uxReturn = uxCurrentEventBits;
354  xTicksToWait = ( TickType_t ) 0;
355 
356  /* Clear the wait bits if requested to do so. */
357  if( xClearOnExit != pdFALSE )
358  {
359  pxEventBits->uxEventBits &= ~uxBitsToWaitFor;
360  }
361  else
362  {
364  }
365  }
366  else if( xTicksToWait == ( TickType_t ) 0 )
367  {
368  /* The wait condition has not been met, but no block time was
369  specified, so just return the current value. */
370  uxReturn = uxCurrentEventBits;
371  }
372  else
373  {
374  /* The task is going to block to wait for its required bits to be
375  set. uxControlBits are used to remember the specified behaviour of
376  this call to xEventGroupWaitBits() - for use when the event bits
377  unblock the task. */
378  if( xClearOnExit != pdFALSE )
379  {
380  uxControlBits |= eventCLEAR_EVENTS_ON_EXIT_BIT;
381  }
382  else
383  {
385  }
386 
387  if( xWaitForAllBits != pdFALSE )
388  {
389  uxControlBits |= eventWAIT_FOR_ALL_BITS;
390  }
391  else
392  {
394  }
395 
396  /* Store the bits that the calling task is waiting for in the
397  task's event list item so the kernel knows when a match is
398  found. Then enter the blocked state. */
399  vTaskPlaceOnUnorderedEventList( &( pxEventBits->xTasksWaitingForBits ), ( uxBitsToWaitFor | uxControlBits ), xTicksToWait );
400 
401  /* This is obsolete as it will get set after the task unblocks, but
402  some compilers mistakenly generate a warning about the variable
403  being returned without being set if it is not done. */
404  uxReturn = 0;
405 
406  traceEVENT_GROUP_WAIT_BITS_BLOCK( xEventGroup, uxBitsToWaitFor );
407  }
408  }
409  xAlreadyYielded = xTaskResumeAll();
410 
411  if( xTicksToWait != ( TickType_t ) 0 )
412  {
413  if( xAlreadyYielded == pdFALSE )
414  {
416  }
417  else
418  {
420  }
421 
422  /* The task blocked to wait for its required bits to be set - at this
423  point either the required bits were set or the block time expired. If
424  the required bits were set they will have been stored in the task's
425  event list item, and they should now be retrieved then cleared. */
426  uxReturn = uxTaskResetEventItemValue();
427 
428  if( ( uxReturn & eventUNBLOCKED_DUE_TO_BIT_SET ) == ( EventBits_t ) 0 )
429  {
431  {
432  /* The task timed out, just return the current event bit value. */
433  uxReturn = pxEventBits->uxEventBits;
434 
435  /* It is possible that the event bits were updated between this
436  task leaving the Blocked state and running again. */
437  if( prvTestWaitCondition( uxReturn, uxBitsToWaitFor, xWaitForAllBits ) != pdFALSE )
438  {
439  if( xClearOnExit != pdFALSE )
440  {
441  pxEventBits->uxEventBits &= ~uxBitsToWaitFor;
442  }
443  else
444  {
446  }
447  }
448  else
449  {
451  }
452  }
454 
455  /* Prevent compiler warnings when trace macros are not used. */
456  xTimeoutOccurred = pdFALSE;
457  }
458  else
459  {
460  /* The task unblocked because the bits were set. */
461  }
462 
463  /* The task blocked so control bits may have been set. */
464  uxReturn &= ~eventEVENT_BITS_CONTROL_BYTES;
465  }
466  traceEVENT_GROUP_WAIT_BITS_END( xEventGroup, uxBitsToWaitFor, xTimeoutOccurred );
467 
468  return uxReturn;
469 }
Here is the call graph for this function:

◆ xEventGroupClearBits()

PRIVILEGED_FUNCTION EventBits_t xEventGroupClearBits ( EventGroupHandle_t  xEventGroup,
const EventBits_t  uxBitsToClear 
)
473 {
474 EventGroup_t *pxEventBits = ( EventGroup_t * ) xEventGroup;
475 EventBits_t uxReturn;
476 
477  /* Check the user is not attempting to clear the bits used by the kernel
478  itself. */
479  configASSERT( xEventGroup );
480  configASSERT( ( uxBitsToClear & eventEVENT_BITS_CONTROL_BYTES ) == 0 );
481 
483  {
484  traceEVENT_GROUP_CLEAR_BITS( xEventGroup, uxBitsToClear );
485 
486  /* The value returned is the event group value prior to the bits being
487  cleared. */
488  uxReturn = pxEventBits->uxEventBits;
489 
490  /* Clear the bits. */
491  pxEventBits->uxEventBits &= ~uxBitsToClear;
492  }
494 
495  return uxReturn;
496 }
Here is the caller graph for this function:

◆ xEventGroupSetBits()

PRIVILEGED_FUNCTION EventBits_t xEventGroupSetBits ( EventGroupHandle_t  xEventGroup,
const EventBits_t  uxBitsToSet 
)
531 {
532 ListItem_t *pxListItem, *pxNext;
533 ListItem_t const *pxListEnd;
534 List_t *pxList;
535 EventBits_t uxBitsToClear = 0, uxBitsWaitedFor, uxControlBits;
536 EventGroup_t *pxEventBits = ( EventGroup_t * ) xEventGroup;
537 BaseType_t xMatchFound = pdFALSE;
538 
539  /* Check the user is not attempting to set the bits used by the kernel
540  itself. */
541  configASSERT( xEventGroup );
542  configASSERT( ( uxBitsToSet & eventEVENT_BITS_CONTROL_BYTES ) == 0 );
543 
544  pxList = &( pxEventBits->xTasksWaitingForBits );
545  pxListEnd = listGET_END_MARKER( pxList ); /*lint !e826 !e740 The mini list structure is used as the list end to save RAM. This is checked and valid. */
546  vTaskSuspendAll();
547  {
548  traceEVENT_GROUP_SET_BITS( xEventGroup, uxBitsToSet );
549 
550  pxListItem = listGET_HEAD_ENTRY( pxList );
551 
552  /* Set the bits. */
553  pxEventBits->uxEventBits |= uxBitsToSet;
554 
555  /* See if the new bit value should unblock any tasks. */
556  while( pxListItem != pxListEnd )
557  {
558  pxNext = listGET_NEXT( pxListItem );
559  uxBitsWaitedFor = listGET_LIST_ITEM_VALUE( pxListItem );
560  xMatchFound = pdFALSE;
561 
562  /* Split the bits waited for from the control bits. */
563  uxControlBits = uxBitsWaitedFor & eventEVENT_BITS_CONTROL_BYTES;
564  uxBitsWaitedFor &= ~eventEVENT_BITS_CONTROL_BYTES;
565 
566  if( ( uxControlBits & eventWAIT_FOR_ALL_BITS ) == ( EventBits_t ) 0 )
567  {
568  /* Just looking for single bit being set. */
569  if( ( uxBitsWaitedFor & pxEventBits->uxEventBits ) != ( EventBits_t ) 0 )
570  {
571  xMatchFound = pdTRUE;
572  }
573  else
574  {
576  }
577  }
578  else if( ( uxBitsWaitedFor & pxEventBits->uxEventBits ) == uxBitsWaitedFor )
579  {
580  /* All bits are set. */
581  xMatchFound = pdTRUE;
582  }
583  else
584  {
585  /* Need all bits to be set, but not all the bits were set. */
586  }
587 
588  if( xMatchFound != pdFALSE )
589  {
590  /* The bits match. Should the bits be cleared on exit? */
591  if( ( uxControlBits & eventCLEAR_EVENTS_ON_EXIT_BIT ) != ( EventBits_t ) 0 )
592  {
593  uxBitsToClear |= uxBitsWaitedFor;
594  }
595  else
596  {
598  }
599 
600  /* Store the actual event flag value in the task's event list
601  item before removing the task from the event list. The
602  eventUNBLOCKED_DUE_TO_BIT_SET bit is set so the task knows
603  that is was unblocked due to its required bits matching, rather
604  than because it timed out. */
606  }
607 
608  /* Move onto the next list item. Note pxListItem->pxNext is not
609  used here as the list item may have been removed from the event list
610  and inserted into the ready/pending reading list. */
611  pxListItem = pxNext;
612  }
613 
614  /* Clear any bits that matched when the eventCLEAR_EVENTS_ON_EXIT_BIT
615  bit was set in the control word. */
616  pxEventBits->uxEventBits &= ~uxBitsToClear;
617  }
618  ( void ) xTaskResumeAll();
619 
620  return pxEventBits->uxEventBits;
621 }
Here is the call graph for this function:
Here is the caller graph for this function:

◆ xEventGroupSync()

PRIVILEGED_FUNCTION EventBits_t xEventGroupSync ( EventGroupHandle_t  xEventGroup,
const EventBits_t  uxBitsToSet,
const EventBits_t  uxBitsToWaitFor,
TickType_t  xTicksToWait 
)
209 {
210 EventBits_t uxOriginalBitValue, uxReturn;
211 EventGroup_t *pxEventBits = ( EventGroup_t * ) xEventGroup;
212 BaseType_t xAlreadyYielded;
213 BaseType_t xTimeoutOccurred = pdFALSE;
214 
215  configASSERT( ( uxBitsToWaitFor & eventEVENT_BITS_CONTROL_BYTES ) == 0 );
216  configASSERT( uxBitsToWaitFor != 0 );
217  #if ( ( INCLUDE_xTaskGetSchedulerState == 1 ) || ( configUSE_TIMERS == 1 ) )
218  {
219  configASSERT( !( ( xTaskGetSchedulerState() == taskSCHEDULER_SUSPENDED ) && ( xTicksToWait != 0 ) ) );
220  }
221  #endif
222 
223  vTaskSuspendAll();
224  {
225  uxOriginalBitValue = pxEventBits->uxEventBits;
226 
227  ( void ) xEventGroupSetBits( xEventGroup, uxBitsToSet );
228 
229  if( ( ( uxOriginalBitValue | uxBitsToSet ) & uxBitsToWaitFor ) == uxBitsToWaitFor )
230  {
231  /* All the rendezvous bits are now set - no need to block. */
232  uxReturn = ( uxOriginalBitValue | uxBitsToSet );
233 
234  /* Rendezvous always clear the bits. They will have been cleared
235  already unless this is the only task in the rendezvous. */
236  pxEventBits->uxEventBits &= ~uxBitsToWaitFor;
237 
238  xTicksToWait = 0;
239  }
240  else
241  {
242  if( xTicksToWait != ( TickType_t ) 0 )
243  {
244  traceEVENT_GROUP_SYNC_BLOCK( xEventGroup, uxBitsToSet, uxBitsToWaitFor );
245 
246  /* Store the bits that the calling task is waiting for in the
247  task's event list item so the kernel knows when a match is
248  found. Then enter the blocked state. */
249  vTaskPlaceOnUnorderedEventList( &( pxEventBits->xTasksWaitingForBits ), ( uxBitsToWaitFor | eventCLEAR_EVENTS_ON_EXIT_BIT | eventWAIT_FOR_ALL_BITS ), xTicksToWait );
250 
251  /* This assignment is obsolete as uxReturn will get set after
252  the task unblocks, but some compilers mistakenly generate a
253  warning about uxReturn being returned without being set if the
254  assignment is omitted. */
255  uxReturn = 0;
256  }
257  else
258  {
259  /* The rendezvous bits were not set, but no block time was
260  specified - just return the current event bit value. */
261  uxReturn = pxEventBits->uxEventBits;
262  }
263  }
264  }
265  xAlreadyYielded = xTaskResumeAll();
266 
267  if( xTicksToWait != ( TickType_t ) 0 )
268  {
269  if( xAlreadyYielded == pdFALSE )
270  {
272  }
273  else
274  {
276  }
277 
278  /* The task blocked to wait for its required bits to be set - at this
279  point either the required bits were set or the block time expired. If
280  the required bits were set they will have been stored in the task's
281  event list item, and they should now be retrieved then cleared. */
282  uxReturn = uxTaskResetEventItemValue();
283 
284  if( ( uxReturn & eventUNBLOCKED_DUE_TO_BIT_SET ) == ( EventBits_t ) 0 )
285  {
286  /* The task timed out, just return the current event bit value. */
288  {
289  uxReturn = pxEventBits->uxEventBits;
290 
291  /* Although the task got here because it timed out before the
292  bits it was waiting for were set, it is possible that since it
293  unblocked another task has set the bits. If this is the case
294  then it needs to clear the bits before exiting. */
295  if( ( uxReturn & uxBitsToWaitFor ) == uxBitsToWaitFor )
296  {
297  pxEventBits->uxEventBits &= ~uxBitsToWaitFor;
298  }
299  else
300  {
302  }
303  }
305 
306  xTimeoutOccurred = pdTRUE;
307  }
308  else
309  {
310  /* The task unblocked because the bits were set. */
311  }
312 
313  /* Control bits might be set as the task had blocked should not be
314  returned. */
315  uxReturn &= ~eventEVENT_BITS_CONTROL_BYTES;
316  }
317 
318  traceEVENT_GROUP_SYNC_END( xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTimeoutOccurred );
319 
320  return uxReturn;
321 }
Here is the call graph for this function:

◆ xEventGroupGetBitsFromISR()

PRIVILEGED_FUNCTION EventBits_t xEventGroupGetBitsFromISR ( EventGroupHandle_t  xEventGroup)
515 {
516 UBaseType_t uxSavedInterruptStatus;
517 EventGroup_t *pxEventBits = ( EventGroup_t * ) xEventGroup;
518 EventBits_t uxReturn;
519 
520  uxSavedInterruptStatus = portSET_INTERRUPT_MASK_FROM_ISR();
521  {
522  uxReturn = pxEventBits->uxEventBits;
523  }
524  portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedInterruptStatus );
525 
526  return uxReturn;
527 }

◆ vEventGroupDelete()

PRIVILEGED_FUNCTION void vEventGroupDelete ( EventGroupHandle_t  xEventGroup)

event_groups.h

   void xEventGroupDelete( EventGroupHandle_t xEventGroup );

Delete an event group that was previously created by a call to xEventGroupCreate(). Tasks that are blocked on the event group will be unblocked and obtain 0 as the event group's value.

Parameters
xEventGroupThe event group being deleted.
625 {
626 EventGroup_t *pxEventBits = ( EventGroup_t * ) xEventGroup;
627 const List_t *pxTasksWaitingForBits = &( pxEventBits->xTasksWaitingForBits );
628 
629  vTaskSuspendAll();
630  {
631  traceEVENT_GROUP_DELETE( xEventGroup );
632 
633  while( listCURRENT_LIST_LENGTH( pxTasksWaitingForBits ) > ( UBaseType_t ) 0 )
634  {
635  /* Unblock the task, returning 0 as the event list is being deleted
636  and cannot therefore have any bits set. */
637  configASSERT( pxTasksWaitingForBits->xListEnd.pxNext != ( ListItem_t * ) &( pxTasksWaitingForBits->xListEnd ) );
639  }
640 
641  #if( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 0 ) )
642  {
643  /* The event group can only have been allocated dynamically - free
644  it again. */
645  vPortFree( pxEventBits );
646  }
647  #elif( ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
648  {
649  /* The event group could have been allocated statically or
650  dynamically, so check before attempting to free the memory. */
651  if( pxEventBits->ucStaticallyAllocated == ( uint8_t ) pdFALSE )
652  {
653  vPortFree( pxEventBits );
654  }
655  else
656  {
658  }
659  }
660  #endif /* configSUPPORT_DYNAMIC_ALLOCATION */
661  }
662  ( void ) xTaskResumeAll();
663 }
Here is the call graph for this function:

◆ vEventGroupSetBitsCallback()

PRIVILEGED_FUNCTION void vEventGroupSetBitsCallback ( void pvEventGroup,
const uint32_t  ulBitsToSet 
)
669 {
670  ( void ) xEventGroupSetBits( pvEventGroup, ( EventBits_t ) ulBitsToSet );
671 }
Here is the call graph for this function:

◆ vEventGroupClearBitsCallback()

PRIVILEGED_FUNCTION void vEventGroupClearBitsCallback ( void pvEventGroup,
const uint32_t  ulBitsToClear 
)
677 {
678  ( void ) xEventGroupClearBits( pvEventGroup, ( EventBits_t ) ulBitsToClear );
679 }
Here is the call graph for this function:
xMINI_LIST_ITEM::pxNext
struct xLIST_ITEM *configLIST_VOLATILE pxNext
Definition: list.h:197
traceEVENT_GROUP_WAIT_BITS_BLOCK
#define traceEVENT_GROUP_WAIT_BITS_BLOCK(xEventGroup, uxBitsToWaitFor)
Definition: FreeRTOS.h:594
portSET_INTERRUPT_MASK_FROM_ISR
#define portSET_INTERRUPT_MASK_FROM_ISR()
Definition: FreeRTOS.h:300
xEventGroupDefinition
Definition: event_groups.c:105
xLIST
Definition: list.h:205
xTaskGetSchedulerState
PRIVILEGED_FUNCTION BaseType_t xTaskGetSchedulerState(void)
traceEVENT_GROUP_SYNC_END
#define traceEVENT_GROUP_SYNC_END(xEventGroup, uxBitsToSet, uxBitsToWaitFor, xTimeoutOccurred)
Definition: FreeRTOS.h:590
configASSERT
#define configASSERT(x)
Definition: FreeRTOSConfig.h:162
xLIST_ITEM
Definition: list.h:181
listCURRENT_LIST_LENGTH
#define listCURRENT_LIST_LENGTH(pxList)
Definition: list.h:296
eventWAIT_FOR_ALL_BITS
#define eventWAIT_FOR_ALL_BITS
Definition: event_groups.c:101
eventCLEAR_EVENTS_ON_EXIT_BIT
#define eventCLEAR_EVENTS_ON_EXIT_BIT
Definition: event_groups.c:99
vTaskPlaceOnUnorderedEventList
PRIVILEGED_FUNCTION void vTaskPlaceOnUnorderedEventList(List_t *pxEventList, const TickType_t xItemValue, const TickType_t xTicksToWait)
Definition: tasks.c:2837
eventEVENT_BITS_CONTROL_BYTES
#define eventEVENT_BITS_CONTROL_BYTES
Definition: event_groups.c:102
traceEVENT_GROUP_WAIT_BITS_END
#define traceEVENT_GROUP_WAIT_BITS_END(xEventGroup, uxBitsToWaitFor, xTimeoutOccurred)
Definition: FreeRTOS.h:598
EventBits_t
TickType_t EventBits_t
Definition: event_groups.h:133
xEventGroupSetBits
EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet)
Definition: event_groups.c:530
xTaskRemoveFromUnorderedEventList
PRIVILEGED_FUNCTION BaseType_t xTaskRemoveFromUnorderedEventList(ListItem_t *pxEventListItem, const TickType_t xItemValue)
Definition: tasks.c:2962
traceEVENT_GROUP_DELETE
#define traceEVENT_GROUP_DELETE(xEventGroup)
Definition: FreeRTOS.h:618
TickType_t
uint32_t TickType_t
Definition: portmacro.h:105
traceEVENT_GROUP_CLEAR_BITS
#define traceEVENT_GROUP_CLEAR_BITS(xEventGroup, uxBitsToClear)
Definition: FreeRTOS.h:602
listGET_LIST_ITEM_VALUE
#define listGET_LIST_ITEM_VALUE(pxListItem)
Definition: list.h:249
taskENTER_CRITICAL
#define taskENTER_CRITICAL()
Definition: task.h:217
pdFALSE
#define pdFALSE
Definition: projdefs.h:86
UBaseType_t
unsigned long UBaseType_t
Definition: portmacro.h:99
xEventGroupDefinition::xTasksWaitingForBits
List_t xTasksWaitingForBits
Definition: event_groups.c:108
xEventGroupClearBits
EventBits_t xEventGroupClearBits(EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToClear)
Definition: event_groups.c:472
void
void
Definition: png.h:1083
traceEVENT_GROUP_SET_BITS
#define traceEVENT_GROUP_SET_BITS(xEventGroup, uxBitsToSet)
Definition: FreeRTOS.h:610
xLIST::xListEnd
MiniListItem_t xListEnd
Definition: list.h:210
traceEVENT_GROUP_SYNC_BLOCK
#define traceEVENT_GROUP_SYNC_BLOCK(xEventGroup, uxBitsToSet, uxBitsToWaitFor)
Definition: FreeRTOS.h:586
taskSCHEDULER_SUSPENDED
#define taskSCHEDULER_SUSPENDED
Definition: task.h:257
xEventGroupDefinition::uxEventBits
EventBits_t uxEventBits
Definition: event_groups.c:107
uint8_t
const uint8_t[]
Definition: 404_html.c:3
portYIELD_WITHIN_API
#define portYIELD_WITHIN_API
Definition: FreeRTOS.h:692
BaseType_t
long BaseType_t
Definition: portmacro.h:98
pdTRUE
#define pdTRUE
Definition: projdefs.h:87
xTaskResumeAll
PRIVILEGED_FUNCTION BaseType_t xTaskResumeAll(void)
Definition: tasks.c:2017
listGET_NEXT
#define listGET_NEXT(pxListItem)
Definition: list.h:274
vPortFree
PRIVILEGED_FUNCTION void vPortFree(void *pv)
Definition: heap_4.c:305
taskEXIT_CRITICAL
#define taskEXIT_CRITICAL()
Definition: task.h:232
portCLEAR_INTERRUPT_MASK_FROM_ISR
#define portCLEAR_INTERRUPT_MASK_FROM_ISR(uxSavedStatusValue)
Definition: FreeRTOS.h:304
vTaskSuspendAll
PRIVILEGED_FUNCTION void vTaskSuspendAll(void)
Definition: tasks.c:1944
prvTestWaitCondition
static PRIVILEGED_FUNCTION BaseType_t prvTestWaitCondition(const EventBits_t uxCurrentEventBits, const EventBits_t uxBitsToWaitFor, const BaseType_t xWaitForAllBits)
Definition: event_groups.c:682
eventUNBLOCKED_DUE_TO_BIT_SET
#define eventUNBLOCKED_DUE_TO_BIT_SET
Definition: event_groups.c:100
uxTaskResetEventItemValue
PRIVILEGED_FUNCTION TickType_t uxTaskResetEventItemValue(void)
Definition: tasks.c:4162
listGET_HEAD_ENTRY
#define listGET_HEAD_ENTRY(pxList)
Definition: list.h:266
mtCOVERAGE_TEST_MARKER
#define mtCOVERAGE_TEST_MARKER()
Definition: FreeRTOS.h:748
listGET_END_MARKER
#define listGET_END_MARKER(pxList)
Definition: list.h:282