Пример #1
0
/*FUNCTION**********************************************************************
 *
 * Function Name : OSA_EventClear
 * Description   : Clear one or more event flags of an event object.
 * Return        :osaStatus_Success if clear successfully, osaStatus_Error if failed.
 *
 *END**************************************************************************/
osaStatus_t OSA_EventClear(osaEventId_t eventId, osaEventFlags_t flagsToClear)
{
#if osNumberOfEvents      
  
  osEventStruct_t* pEventStruct; 
  if(osObjectIsAllocated(&osEventInfo, eventId) == FALSE)
  {
    return osaStatus_Error;
  }
  pEventStruct = (osEventStruct_t*)eventId;  
  if(pEventStruct->event.eventHandler == NULL)
  {
    return osaStatus_Error;
  } 
  
  if (__get_IPSR())
  {
    xEventGroupClearBitsFromISR(pEventStruct->event.eventHandler, (event_flags_t)flagsToClear);
  }
  else
  {
    xEventGroupClearBits(pEventStruct->event.eventHandler, (event_flags_t)flagsToClear);
  }
  
  return osaStatus_Success;
#else
  (void)eventId;
  (void)flagsToClear;  
  return osaStatus_Error;
#endif  
}
Пример #2
0
void vPeriodicEventGroupsProcessing( void )
{
    static BaseType_t xCallCount = 0, xISRTestError = pdFALSE;
    const BaseType_t xSetBitCount = 100, xGetBitsCount = 200, xClearBitsCount = 300;
    const EventBits_t uxBitsToSet = 0x12U;
    EventBits_t uxReturned;
    BaseType_t xMessagePosted;

    /* Called periodically from the tick hook to exercise the "FromISR"
    functions. */

    xCallCount++;

    if( xCallCount == xSetBitCount ) {
        /* All the event bits should start clear. */
        uxReturned = xEventGroupGetBitsFromISR( xISREventGroup );
        if( uxReturned != 0x00 ) {
            xISRTestError = pdTRUE;
        } else {
            /* Set the bits.  This is called from the tick hook so it is not
            necessary to use the last parameter to ensure a context switch
            occurs immediately. */
            xMessagePosted = xEventGroupSetBitsFromISR( xISREventGroup, uxBitsToSet, NULL );
            if( xMessagePosted != pdPASS ) {
                xISRTestError = pdTRUE;
            }
        }
    } else if( xCallCount == xGetBitsCount ) {
        /* Check the bits were set as expected. */
        uxReturned = xEventGroupGetBitsFromISR( xISREventGroup );
        if( uxReturned != uxBitsToSet ) {
            xISRTestError = pdTRUE;
        }
    } else if( xCallCount == xClearBitsCount ) {
        /* Clear the bits again. */
        uxReturned = ( EventBits_t ) xEventGroupClearBitsFromISR( xISREventGroup, uxBitsToSet );

        /* Check the message was posted. */
        if( uxReturned != pdPASS ) {
            xISRTestError = pdTRUE;
        }

        /* Go back to the start. */
        xCallCount = 0;

        /* If no errors have been detected then increment the count of test
        cycles. */
        if( xISRTestError == pdFALSE ) {
            ulISRCycles++;
        }
    } else {
        /* Nothing else to do. */
    }
}
/*FUNCTION**********************************************************************
 *
 * Function Name : OSA_EventClear
 * Description   : Clear one or more event flags of an event object.
 * Return kStatus_OSA_Success if clear successfully, kStatus_OSA_Error if failed.
 *
 *END**************************************************************************/
osa_status_t OSA_EventClear(event_t *pEvent, event_flags_t flagsToClear)
{
    assert(pEvent);

	if (__get_IPSR())
	{
	    xEventGroupClearBitsFromISR(pEvent->eventHandler, flagsToClear);
	}
	else
	{
        xEventGroupClearBits(pEvent->eventHandler, flagsToClear);
    }

    return kStatus_OSA_Success;
}
Пример #4
0
/// Clear the specified Signal Flags of an active thread.
/// \param[in]     thread_id     thread ID obtained by \ref osThreadCreate or \ref osThreadGetId.
/// \param[in]     signals       specifies the signal flags of the thread that shall be cleared.
/// \return previous signal flags of the specified thread or 0x80000000 in case of incorrect parameters.
/// \note MUST REMAIN UNCHANGED: \b osSignalClear shall be consistent in every CMSIS-RTOS.
int32_t osSignalClear (osThreadId thread_id, int32_t signals)
{
    EventGroupHandle_t event_handle;
    //portBASE_TYPE taskWoken = pdFALSE;
    EventBits_t uxBits_ret=0x80000000;
#ifdef CHECK_VALUE_OF_EVENT_GROUP     
    EventBits_t uxBits;
#endif    

    if (signals & (0xFFFFFFFF << osFeature_Signals)) {
        return 0x80000000;
    }

    event_handle = find_signal_by_thread(thread_id);
    if (event_handle) {
        if (inHandlerMode()) {
            uxBits_ret = xEventGroupGetBitsFromISR(event_handle);
#ifdef CHECK_VALUE_OF_EVENT_GROUP                
            uxBits = 
#endif              
                      xEventGroupClearBitsFromISR(
                         event_handle,    /* The event group being updated. */
                         signals);/* The bits being cleared. */
        }
        else {
            uxBits_ret = xEventGroupGetBits(event_handle);
#ifdef CHECK_VALUE_OF_EVENT_GROUP                
            uxBits = 
#endif              
                      xEventGroupClearBits(                                          
                         event_handle,    /* The event group being updated. */
                         signals);/* The bits being cleared. */
        }
    }

    return uxBits_ret;
}