コード例 #1
0
ファイル: menu.c プロジェクト: pierreroth64/STM32Cube_FW_F4
/**
  * @brief  EXTI line detection callbacks.
  * @param  GPIO_Pin: Specifies the pins connected EXTI line
  * @retval None
  */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{  
  __IO JOYState_TypeDef JoyState = JOY_NONE;
  
  if(GPIO_Pin == MFX_IRQOUT_PIN)
  {
    /* The different functionalities of MFX (TS, Joystick, SD detection, etc. )  
    can be configured in exti mode to generate an IRQ on given events.
    The MFX IRQ_OUT pin is unique and common to all functionalities, so if several 
    functionalities are configured in exit mode, the MCU has to enquire MFX about  
    the IRQ source (see BSP_IO_ITGetStatus). Communication with Mfx is done by I2C. 
    Often the sw requires ISRs (irq service routines) to be quick while communication 
    with I2C can be considered relatively long (hundreds of usec depending on I2C clk). 
    In order to avoid to use "blocking I2C communication" on interrupt service routines 
    it's suggested (as alternative to this implementation) to use dedicated semaphore*/

    /* Get the Joystick State */
    JoyState = BSP_JOY_GetState();
    
    HID_DEMO_ProbeKey(JoyState); 
    
    switch(JoyState)
    {
    case JOY_LEFT:
      LCD_LOG_ScrollBack();
      break;
           
    case JOY_RIGHT:
      LCD_LOG_ScrollForward();
      break;          
      
    default:
      break;           
    }
    /* Clear joystick interrupt pending bits */
    BSP_IO_ITClear();
    osSemaphoreRelease(MenuEvent);
  }
}
コード例 #2
0
/**
  * @brief  Demo state machine.
  * @param  None
  * @retval None
  */
void Menu_Init(void)
{
  /* Create Menu Semaphore */
  osSemaphoreDef(osSem);

  MenuEvent = osSemaphoreCreate(osSemaphore(osSem), 1);

  /* Force menu to show Item 0 by default */
  osSemaphoreRelease(MenuEvent);

  /* Menu task */
#if defined(__GNUC__)
  osThreadDef(Menu_Thread, MSC_MenuThread, osPriorityHigh, 0, 8 * configMINIMAL_STACK_SIZE);
#else
  osThreadDef(Menu_Thread, MSC_MenuThread, osPriorityHigh, 0, 4 * configMINIMAL_STACK_SIZE);
#endif
  osThreadCreate(osThread(Menu_Thread), NULL);

  BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
  BSP_LCD_DisplayStringAtLine(15, (uint8_t *)"Use [Joystick Left/Right] to scroll up/down");
  BSP_LCD_DisplayStringAtLine(16, (uint8_t *)"Use [Joystick Up/Down] to scroll MSC menu");
}
コード例 #3
0
ファイル: Semaphore.c プロジェクト: AdrK/STM32F7_ADC_DMA_LCD
void Thread_Semaphore (void const *argument) {
  int32_t val;

  while (1) {
    ; // Insert thread code here...

    val = osSemaphoreWait (sid_Thread_Semaphore, 10);           // wait 10 mSec
    switch (val) {
      case osOK:
        ; // Use protected code here...
        osSemaphoreRelease (sid_Thread_Semaphore);              // Return a token back to a semaphore
        break;
      case osErrorResource:
        break;
      case osErrorParameter:
        break;
      default:
        break;
    }

    osThreadYield ();                                           // suspend thread
  }
}
コード例 #4
0
void threadBaseCode  (void const *argument) 			
{
uint32_t LED_data;
	
	LED_data = (uint32_t) argument;
	while(1)					
	{
		
//---------------------------------------------------------------------------------							

		osSemaphoreWait(Mutex,0xffff);			 				//Allow one task at a time to access the first turnstile
		count = count+1;					 									// Increment count
		if( count == 5) 					 									//When last section of code reaches this point run his code
		{
			osSemaphoreWait (Turnstile2,0xffff);	 		//Lock the second turnstile
			osSemaphoreRelease(Turnstile);				 		//Unlock the first turnstile
		}			
		osSemaphoreRelease(Mutex);									//Allow other tasks to access the turnstile
		osSemaphoreWait(Turnstile,0xFFFF);					//Turnstile Gate			
		osSemaphoreRelease(Turnstile);

//----------------------------------- GATE -----------------------------------

		LED_On(LED_data);
		osDelay(100);				   							//Critical instructions 
		LED_Off(LED_data);
		osDelay((LED_data*100));	
//---------------------------------- GATE ------------------------------------

		osSemaphoreWait(Mutex,0xffff);			 				//Allow one task at a time to access the turnstile
		count = count - 1;
		if(count ==0)						 										//When last section of code reaches this point run his code
		{
			osSemaphoreWait(Turnstile,0xffff);		 		//Lock the second turnstile
			osSemaphoreRelease(Turnstile2);			 			//Unlock the first turnstile
		}
		osSemaphoreRelease(Mutex);					 				//Allow other tasks to access the turnstile
		osSemaphoreWait(Turnstile2,0xffff);		 			//Turnstile Gate
		osSemaphoreRelease(Turnstile2);

//------------------------------------------------------------------------------		

	}
}		
コード例 #5
0
void SPI_DMA_xfer(uint8_t* write_buff, uint8_t* read_buff, GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, int numByte){

	// sema will be released in interrupt
	osSemaphoreWait(dmaSema_ID, osWaitForever);
	
	//set chip select low
	GPIO_ResetBits(GPIOx, GPIO_Pin);
	// wait for slave
	//while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6) != Bit_RESET); 
	DMA2_Stream0->M0AR = (uint32_t)(&read_buff[0]);
	DMA2_Stream3->M0AR = (uint32_t)(&write_buff[0]);
	DMA2_Stream0->NDTR = numByte;
	DMA2_Stream3->NDTR = numByte;

	osDelay(10);

	DMA2_Stream0->CR |= DMA_SxCR_EN;
	DMA2_Stream3->CR |= DMA_SxCR_EN;
	
	osSemaphoreWait(dmaComplete_ID, osWaitForever);
	GPIO_SetBits(GPIOx, GPIO_Pin);

	osSemaphoreRelease(dmaSema_ID);
}
コード例 #6
0
ファイル: main.c プロジェクト: pengphei/STM32Cube_L0
/**
  * @brief  Semaphore Thread 1 function
  * @param  argument: shared semaphore
  * @retval None
  */
static void SemaphoreThread1(void const *argument)
{
  uint32_t count = 0;
  osSemaphoreId semaphore = (osSemaphoreId) argument;

  for (;;)
  {

    if (semaphore != NULL)
    {
      /* Try to obtain the semaphore */
      if (osSemaphoreWait(semaphore , 100) == osOK)
      {
        count = osKernelSysTick() + 5000;

        /* Toggle LED2 every 200 ms for 5 seconds */
        while (count >= osKernelSysTick())
        {
          /* Toggle LED3 */
          BSP_LED_Toggle(LED3);

          /* Delay 200 ms */
          osDelay(200);
        }

        /* Turn off LED3*/
        BSP_LED_Off(LED3);
        /* Release the semaphore */
        osSemaphoreRelease(semaphore);

        /* Suspend ourseleves to execute thread 2 (lower priority)  */
        osThreadSuspend(NULL);
      }
    }
  }
}
コード例 #7
0
ファイル: menu.c プロジェクト: z80/stm32f429
/**
  * @brief  Demo state machine.
  * @param  None
  * @retval None
  */
void Menu_Init(void)
{
  /* Create Menu Semaphore */
  osSemaphoreDef(osSem);

  MenuEvent = osSemaphoreCreate(osSemaphore(osSem), 1); 
  
  /* Force menu to show Item 0 by default */
  osSemaphoreRelease(MenuEvent);

  /* Menu task */
  osThreadDef(Menu_Thread, MSC_MenuThread, osPriorityHigh, 0, 8 * configMINIMAL_STACK_SIZE);
  osThreadCreate(osThread(Menu_Thread), NULL);
  
  /* Define used semaphore fot Joystick*/
  osSemaphoreDef(JOY_SEM);
  
  /* Create the semaphore used by the two threads. */
  osJoySemaphore = osSemaphoreCreate(osSemaphore(JOY_SEM) , 1);
  
  BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
  BSP_LCD_DisplayStringAtLine(15, (uint8_t *)"Use [Joystick Left/Right] to scroll up/down");
  BSP_LCD_DisplayStringAtLine(16, (uint8_t *)"Use [Joystick Up/Down] to scroll MSC menu");  
}
コード例 #8
0
/**
  * @brief  User task
  * @param  pvParameters not used
  * @retval None
  */
void HID_MenuThread(void const *argument)
{
  for(;;)
  {
    if(osSemaphoreWait(MenuEvent , osWaitForever) == osOK)
    {
      switch(hid_demo.state)
      {
      case HID_DEMO_IDLE:
        HID_SelectItem(DEMO_HID_menu, 0); 
        hid_demo.state = HID_DEMO_WAIT;
        hid_demo.select = 0;
        osSemaphoreRelease(MenuEvent);
        break;        
        
      case HID_DEMO_WAIT:
        if(hid_demo.select != prev_select)
        {
          prev_select = hid_demo.select;        
          
          HID_SelectItem(DEMO_HID_menu, hid_demo.select & 0x7F); 
          /* Handle select item */
          if(hid_demo.select & 0x80)
          {
            switch(hid_demo.select & 0x7F)
            {
            case 0:
              hid_demo.state = HID_DEMO_START; 
              osSemaphoreRelease(MenuEvent);
              break;
              
            case 1:
              hid_demo.state = HID_DEMO_REENUMERATE;
              osSemaphoreRelease(MenuEvent);
              break;
              
            default:
              break;
            }
          }
        }
        break; 
        
      case HID_DEMO_START:
        if(Appli_state == APPLICATION_READY)
        {
          if(USBH_HID_GetDeviceType(&hUSBHost) == HID_KEYBOARD)
          {
            hid_demo.keyboard_state = HID_KEYBOARD_IDLE; 
            hid_demo.state = HID_DEMO_KEYBOARD;
          }
          else if(USBH_HID_GetDeviceType(&hUSBHost) == HID_MOUSE)
          {
            hid_demo.mouse_state = HID_MOUSE_IDLE;  
            hid_demo.state = HID_DEMO_MOUSE;        
          }
        }
        else
        {
          LCD_ErrLog("No supported HID device!\n");
          hid_demo.state = HID_DEMO_WAIT;
        }
        osSemaphoreRelease(MenuEvent);
        break;
        
      case HID_DEMO_REENUMERATE:
        /* Force MSC Device to re-enumerate */
        USBH_ReEnumerate(&hUSBHost); 
        hid_demo.state = HID_DEMO_WAIT;
        osSemaphoreRelease(MenuEvent);
        break;
        
      case HID_DEMO_MOUSE:
        if(Appli_state == APPLICATION_READY)
        {
          HID_MouseMenuProcess();
          USBH_MouseDemo(&hUSBHost);
        }
        break; 
        
      case HID_DEMO_KEYBOARD:
        if(Appli_state == APPLICATION_READY)  
        {    
          HID_KeyboardMenuProcess();
          USBH_KeybdDemo(&hUSBHost);
        }   
        break;
        
      default:
        break;
      }
      
      if(Appli_state == APPLICATION_DISCONNECT)
      {
        Appli_state = APPLICATION_IDLE; 
        LCD_LOG_ClearTextZone();
        LCD_ErrLog("HID device disconnected!\n");
        hid_demo.state = HID_DEMO_IDLE;
        hid_demo.select = 0;    
      }
      hid_demo.select &= 0x7F;
    }
  }
}
コード例 #9
0
ファイル: myCAN.c プロジェクト: liudanghao/DAVE4500
void EventHandlerCAN0()
{
/*
	  if(CAN001_GetMOFlagStatus(&CAN001_Handle0,1,TRANSMIT_PENDING) == CAN_SET)
	  {
	    CAN001_ClearMOFlagStatus(&CAN001_Handle0,1,TRANSMIT_PENDING);
	  }
	  if(CAN001_GetMOFlagStatus(&CAN001_Handle0,2,TRANSMIT_PENDING) == CAN_SET)
	  {
	    CAN001_ClearMOFlagStatus(&CAN001_Handle0,2,TRANSMIT_PENDING);
	  }
	  if(CAN001_GetMOFlagStatus(&CAN001_Handle0,3,TRANSMIT_PENDING) == CAN_SET)
	  {
	    CAN001_ClearMOFlagStatus(&CAN001_Handle0,3,TRANSMIT_PENDING);
	  }
	  if(CAN001_GetMOFlagStatus(&CAN001_Handle0,4,TRANSMIT_PENDING) == CAN_SET)
	  {
	    CAN001_ClearMOFlagStatus(&CAN001_Handle0,4,TRANSMIT_PENDING);
	  }
*/


	  if(CAN001_GetMOFlagStatus(&CAN001_Handle0,5,RECEIVE_PENDING) == CAN_SET)
	  {
	    CAN001_ClearMOFlagStatus(&CAN001_Handle0,5,RECEIVE_PENDING);
	    CAN001_ReadMsgObj(&CAN001_Handle0,&can0rx.buf[can0rx.WritePos],5);
	    can0rx.WritePos++;
	    can0rx.WritePos&=(MAXLINE-1);
	    osSemaphoreRelease(can0rx_semaphore_id);
	  }
	  if(CAN001_GetMOFlagStatus(&CAN001_Handle0,6,RECEIVE_PENDING) == CAN_SET)
	  {
	    CAN001_ClearMOFlagStatus(&CAN001_Handle0,6,RECEIVE_PENDING);
	    CAN001_ReadMsgObj(&CAN001_Handle0,&can0rx.buf[can0rx.WritePos],6);
	    can0rx.WritePos++;
	    can0rx.WritePos&=(MAXLINE-1);
	    osSemaphoreRelease(can0rx_semaphore_id);
	  }
	  if(CAN001_GetMOFlagStatus(&CAN001_Handle0,7,RECEIVE_PENDING) == CAN_SET)
	  {
	    CAN001_ClearMOFlagStatus(&CAN001_Handle0,7,RECEIVE_PENDING);
	    CAN001_ReadMsgObj(&CAN001_Handle0,&can0rx.buf[can0rx.WritePos],7);
	    can0rx.WritePos++;
	    can0rx.WritePos&=(MAXLINE-1);
	    osSemaphoreRelease(can0rx_semaphore_id);
	  }
	  if(CAN001_GetMOFlagStatus(&CAN001_Handle0,8,RECEIVE_PENDING) == CAN_SET)
	  {
	    CAN001_ClearMOFlagStatus(&CAN001_Handle0,8,RECEIVE_PENDING);
	    CAN001_ReadMsgObj(&CAN001_Handle0,&can0rx.buf[can0rx.WritePos],8);
	    can0rx.WritePos++;
	    can0rx.WritePos&=(MAXLINE-1);
	    osSemaphoreRelease(can0rx_semaphore_id);
	  }


	  if(CAN001_GetNodeFlagStatus(&CAN001_Handle0,CAN001_ALERT_STATUS) == CAN_SET)
	  {
	    CAN001_ClearNodeFlagStatus(&CAN001_Handle0,CAN001_ALERT_STATUS);
	  }

}
コード例 #10
0
ファイル: main.c プロジェクト: 451506709/automated_machine
/**
  * @brief  EXTI line detection callbacks
  * @param  GPIO_Pin: Specifies the pins connected EXTI line
  * @retval None
  */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
  osSemaphoreRelease(osSemaphore);
}
コード例 #11
0
ファイル: thread2.c プロジェクト: rozmov/RavenOS
/*! 
    \brief Thread definition for thread 2.
    \param argument A pointer to the list of arguments.
*/
void thread2 (void const *argument) 
{
  if (addTraceProtected("thread2 start run") != TRACE_OK)
	{
		stop_cpu;
	}
	
  while (1) 
	{		
		if (addTraceProtected("thread2 take sem0 attempt") != TRACE_OK)
		{
			stop_cpu;
		}		
    if ( osSemaphoreWait (sid_Semaphore0, osWaitForever) != -1 ) // wait forever
		{					 
			if (addTraceProtected("thread2 take sem0 success") != TRACE_OK)
			{
				stop_cpu;
			}	
			
			task2(); // thread code
			count1Sec();
			task2();
			
			if (addTraceProtected("thread2 release sem0 attempt") != TRACE_OK)
			{
				stop_cpu;
			}				
			if (osSemaphoreRelease (sid_Semaphore0) != osOK)
			{
				if (addTraceProtected("thread2 release sem0 fail") != TRACE_OK)
				{
					stop_cpu;
				}						
			}
		}
		else
		{
			if (addTraceProtected("thread2 take sem0 fail") != TRACE_OK)
			{
				stop_cpu;
			}				
		}

		if (addTraceProtected("thread2 set priority to osPriorityBelowNormal") != TRACE_OK)
		{
			stop_cpu;
		}		
		osThreadSetPriority(osThreadGetId(), osPriorityBelowNormal);
		
		if (addTraceProtected("thread2 yields") != TRACE_OK)
		{
			stop_cpu;
		}		
    osThreadYield();                                            // suspend thread
		
		if (addTraceProtected("thread2 back from yield") != TRACE_OK)
		{
			stop_cpu;
		}
		
		// This should terminate the current thread2 thread		
		if (Terminate_thread2() != 0)
		{
			stop_cpu;		
		}
		
  }
}
コード例 #12
0
ファイル: Semaphore.cpp プロジェクト: toyowata/mbed
osStatus Semaphore::release(void)
{
    return osSemaphoreRelease(_id);
}
コード例 #13
0
ファイル: menu.c プロジェクト: z80/stm32f429
/**
  * @brief  User task
  * @param  pvParameters not used
  * @retval None
  */
void HID_MenuThread(void const *argument)
{
  for(;;)
  {
    if(osSemaphoreWait(MenuEvent , osWaitForever) == osOK)
    {
      switch(hid_demo.state)
      {
      case HID_DEMO_IDLE:
          hid_demo.state = HID_DEMO_START;
          osSemaphoreRelease(MenuEvent);
        break;  
        
      case HID_DEMO_START:
        if(Appli_state == APPLICATION_READY)
        {
          /* Wait for User Input */
          if(ButtonPressed == 1)
          {
            ButtonPressed = 0;
            if(USBH_HID_GetDeviceType(&hUSBHost) == HID_KEYBOARD)
            {
              hid_demo.keyboard_state = HID_KEYBOARD_START;
              hid_demo.state = HID_DEMO_KEYBOARD;
              HID_KeyboardMenuProcess();
            }
            else if(USBH_HID_GetDeviceType(&hUSBHost) == HID_MOUSE)
            {
              hid_demo.mouse_state = HID_MOUSE_START;
              hid_demo.state = HID_DEMO_MOUSE;
              HID_MouseMenuProcess();
            }
            else
            {
              LCD_ErrLog("No supported HID device!\n");
              hid_demo.state = HID_DEMO_IDLE;
            }
          }
          osSemaphoreRelease(MenuEvent);          
        }
        break;
        
      case HID_DEMO_MOUSE:
        if(Appli_state == APPLICATION_READY)
        {
          USBH_MouseDemo(&hUSBHost);
        }
        break;
        
      case HID_DEMO_KEYBOARD:
        if(Appli_state == APPLICATION_READY)  
        {
          USBH_KeybdDemo(&hUSBHost);
        }   
        break;
        
      default:
        break;
      }
      
      if(Appli_state == APPLICATION_DISCONNECT)
      {
        Appli_state = APPLICATION_IDLE; 
        LCD_LOG_ClearTextZone();
        BSP_LCD_ClearStringLine(19);
        LCD_ErrLog("HID device disconnected!\n");
        hid_demo.state = HID_DEMO_IDLE;
      }
    }
  }
}
コード例 #14
0
ファイル: MBM_Port.C プロジェクト: github188/JSD-KB6120E_V2.x
void	vMBM_EventPut_Post( void )
{	//	设置发送完成标志
	osSemaphoreRelease( semaphore_TX );
}
コード例 #15
0
/**
  * @brief  The function is a callback about HID Data events
  * @param  phost: Selected device
  * @retval None
  */
void USBH_HID_EventCallback(USBH_HandleTypeDef *phost)
{
  osSemaphoreRelease(MenuEvent);
}
コード例 #16
0
void osSetEvent(OsEvent *event)
{
   //Set the specified event to the signaled state
   osSemaphoreRelease(event->id);
}
コード例 #17
0
void ff_rel_grant (
    _SYNC_t sobj    /* Sync object to be signaled */
)
{
  osSemaphoreRelease(sobj);
}
コード例 #18
0
osStatus release_mySemaphore(struct mySemaphore *sem) {
	return osSemaphoreRelease(sem->_osSemaphoreId);
}
コード例 #19
0
/*-----------------------------------------------------------------------------
  Routine to Move the Objects
 *----------------------------------------------------------------------------*/
void S_MoveObjects (void){
	int8_t i = 0;
	uint32_t 	randNum;
	
	osMutexWait(objectVar_mutex_id, osWaitForever);
	
		srand(randSeed);
		randSeed++;
		randNum = rand();
	
	if (objectNumb < maxNumberObjects){				

		if (randNum % 17 == 0) {
				objectArray[objectNumb][0] = 100;
				objectArray[objectNumb][1] = 80;
		} else if (randNum % 11 == 0) {
				objectArray[objectNumb][0] = 40;
				objectArray[objectNumb][1] = 90;
		} else if (randNum % 7 == 0) {
				objectArray[objectNumb][0] = 200;
				objectArray[objectNumb][1] = 220;
		} else if (randNum % 5 == 0) {
				objectArray[objectNumb][0] = 60;
				objectArray[objectNumb][1] = 180;
		} else if (randNum % 3 == 0) {
				objectArray[objectNumb][0] = 150;
				objectArray[objectNumb][1] = 120;
		} else if (randNum % 2 == 0) {
				objectArray[objectNumb][0] = 80;
				objectArray[objectNumb][1] = 130;
		} else {
				objectArray[objectNumb][0] = 90;
				objectArray[objectNumb][1] = 80;
		}

		objSenseArray[objectNumb][0] = -10;
		objSenseArray[objectNumb][1] = 10;
		
		objectNumb++;
	}

	osMutexRelease(objectVar_mutex_id);
	

	for (i = 0; i < objectNumb; i++){
		// Delete the object at its last position
		osSemaphoreWait (glcd_semaph_id, osWaitForever);
			GLCD_SetForegroundColor (GLCD_COLOR_BLACK);
			S_DrawStar (objectArray[i][0], objectArray[i][1]);
		osSemaphoreRelease(glcd_semaph_id);

		osMutexWait(objectVar_mutex_id, osWaitForever);
		
		if(!i)
		{
			if (randNum % 5 == 0)
			{
				objSenseArray[i][0] = 20;
				objSenseArray[i][1] = 20;
			}
			else
			{
				objSenseArray[i][0] = 3;
				objSenseArray[i][1] = 3;
			}
				
			//Homing behaviour for ball 0
			if( objectArray[i][0] < plane_x ){
				objSenseArray[i][0] = abs(objSenseArray[i][0]);
			}
			else
			{
				objSenseArray[i][0] = -abs(objSenseArray[i][0]);
			}
		
			if( objectArray[i][1] < plane_y ){
				objSenseArray[i][1] = abs(objSenseArray[i][1]);
			}
			else
			{
				objSenseArray[i][1] = -abs(objSenseArray[i][1]);
			}
		}		
			
		// Reverse X sense if the object reach the limits
			if( objectArray[i][0] < 1 | objectArray[i][0] > GLCD_WIDTH - 11){
				objSenseArray[i][0] = -objSenseArray[i][0];
			}
		// Reverse Y sense if the object reach the limits
			if( objectArray[i][1] < 29 | objectArray[i][1] > GLCD_HEIGHT - 11){
				objSenseArray[i][1] = -objSenseArray[i][1];
			}
		// Move position of object
			objectArray[i][0]+=objSenseArray[i][0];
			objectArray[i][1]+=objSenseArray[i][1];

		// Draw the object at its new position
		osSemaphoreWait (glcd_semaph_id, osWaitForever);
			
			switch(i)
			{
				case 0:
					if(abs(objSenseArray[i][0]) == 20)						
					{
						objectColor = GLCD_COLOR_RED;
					}
					else
					{
						objectColor = GLCD_COLOR_BLUE;
					}
					break;
				case 1:
					objectColor = GLCD_COLOR_YELLOW;
					break;
				default:
					objectColor = GLCD_COLOR_WHITE;
				break;
			}	
			
			GLCD_SetForegroundColor (objectColor);
			S_DrawStar (objectArray[i][0],objectArray[i][1]);
		osSemaphoreRelease(glcd_semaph_id); 
		
			osMutexRelease(objectVar_mutex_id);
	}
}
コード例 #20
0
ファイル: thread0.c プロジェクト: rozmov/RavenOS
/*! \fn void thread0 (void const *argument)
    \brief Thread definition for thread 0.
    \param argument A pointer to the list of arguments.
*/
void thread0 (void const *argument) 
{
	
	if (addTraceProtected("thread0 start run") != TRACE_OK)
	{
		stop_cpu;
	}
	
  while (1) 
	{	
		
		if (addTraceProtected("thread0 take sem0 attempt") != TRACE_OK)
		{
			stop_cpu;
		}			
    if ( osSemaphoreWait (sid_Semaphore0, 0) != -1 ) // no wait
		{      
			if (addTraceProtected("thread0 take sem0 success") != TRACE_OK)
			{
				stop_cpu;
			}	
			
			task0(); // thread code 
			count1Sec();
			task0();
			
			if (addTraceProtected("thread0 set priority to osPriorityLow") != TRACE_OK)
			{
				stop_cpu;
			}			
			osThreadSetPriority(osThreadGetId(), osPriorityLow);
							
			
			if (addTraceProtected("thread0 yields") != TRACE_OK)
			{
				stop_cpu;
			}	
			osThreadYield();  // suspend thread			
				
			if (addTraceProtected("thread0 release sem0 attempt") != TRACE_OK)
			{
				stop_cpu;
			}				
			if (osSemaphoreRelease (sid_Semaphore0) != osOK)
			{
				if (addTraceProtected("thread0 release sem0 fail") != TRACE_OK)
				{
					stop_cpu;
				}						
			}
			else
			{
				if (addTraceProtected("thread0 release sem0 success") != TRACE_OK)
				{
					stop_cpu;
				}					
			}
			
		}
		else
		{
			if (addTraceProtected("thread0 take sem0 fail") != TRACE_OK)
			{
				stop_cpu;
			}				
		}
		
		if (addTraceProtected("thread0 set priority to osPriorityLow") != TRACE_OK)
		{
			stop_cpu;
		}			
		osThreadSetPriority(osThreadGetId(), osPriorityLow);
		    
		
		if (addTraceProtected("thread0 yields") != TRACE_OK)
		{
			stop_cpu;
		}	
    osThreadYield();  // suspend thread
		
		if (addTraceProtected("thread0 back from yield") != TRACE_OK)
		{
			stop_cpu;
		}		
		
		if (addTraceProtected("thread0 delete sem0") != TRACE_OK)
		{
			stop_cpu;
		}				
		if (Delete_Semaphore0() != 0)
		{
			stop_cpu;
		}			
				
    // This should terminate the current thread0 thread		
		if (Terminate_thread0() != 0)
		{
			stop_cpu;		
		}
		
  }
}
コード例 #21
0
ファイル: sys_arch.c プロジェクト: brucetsao/arduino-ameba
/*---------------------------------------------------------------------------*
 * Routine:  sys_sem_signal
 *---------------------------------------------------------------------------*
 * Description:
 *      Signals (releases) a semaphore
 * Inputs:
 *      sys_sem_t sem           -- Semaphore to signal
 *---------------------------------------------------------------------------*/
void sys_sem_signal(sys_sem_t *data) {
    if (osSemaphoreRelease(data->id) != osOK)
        mbed_die(); /* Can be called by ISR do not use printf */
}
コード例 #22
0
/**
  * @brief  Updates the Menu. 
  * @param  None
  * @retval None
  */
void HID_UpdateMenu(void)
{
  /* Force menu to show Item 0 by default */
  hid_demo.state = HID_DEMO_IDLE;
  osSemaphoreRelease(MenuEvent);
}
コード例 #23
0
/**
  * @brief  User task
  * @param  pvParameters not used
  * @retval None
  */
static void MSC_MenuThread(void const *argument)
{
  for(;;)
  {
    if(osSemaphoreWait(MenuEvent, osWaitForever) == osOK)
    {
      switch(msc_demo.state)
      {
      case MSC_DEMO_IDLE:
        MSC_SelectItem(MSC_main_menu, 0);
        msc_demo.state = MSC_DEMO_WAIT;
        msc_demo.select = 0;
        osSemaphoreRelease(MenuEvent);
        break;

      case MSC_DEMO_WAIT:
        MSC_SelectItem(MSC_main_menu, msc_demo.select & 0x7F);

        /* Handle select item */
        if(msc_demo.select & 0x80)
        {
          switch(msc_demo.select & 0x7F)
          {
          case 0:
            msc_demo.state = MSC_DEMO_FILE_OPERATIONS;
            osSemaphoreRelease(MenuEvent);
            break;

          case 1:
            msc_demo.state = MSC_DEMO_EXPLORER;
            osSemaphoreRelease(MenuEvent);
            break;

          case 2:
            msc_demo.state = MSC_REENUMERATE;
            osSemaphoreRelease(MenuEvent);
            break;

          default:
            break;
          }
        }
        break;

      case MSC_DEMO_FILE_OPERATIONS:
        /* Read and Write File Here */
        if(Appli_state == APPLICATION_READY)
        {
          MSC_File_Operations();
        }
        msc_demo.state = MSC_DEMO_WAIT;
        break;

      case MSC_DEMO_EXPLORER:
        /* Display disk content */
        if(Appli_state == APPLICATION_READY)
        {
          Explore_Disk("0:/", 1);
        }
        msc_demo.state = MSC_DEMO_WAIT;
        break;

      case MSC_REENUMERATE:
        /* Force MSC Device to re-enumerate */
        USBH_ReEnumerate(&hUSBHost);
        msc_demo.state = MSC_DEMO_WAIT;
        break;

      default:
        break;
      }
      msc_demo.select &= 0x7F;
    }
  }
}
コード例 #24
0
void osReleaseSemaphore(OsSemaphore *semaphore)
{
   //Release the semaphore
   osSemaphoreRelease(semaphore->id);
}
コード例 #25
0
/**
  * @brief  Ethernet Rx Transfer completed callback
  * @param  heth: ETH handle
  * @retval None
  */
void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth)
{
  osSemaphoreRelease(s_xSemaphore);
}
コード例 #26
0
ファイル: menu.c プロジェクト: z80/stm32f429
/**
  * @brief  User task
  * @param  pvParameters not used
  * @retval None
  */
static void MSC_MenuThread(void const *argument)
{
  uint32_t ITstatus = 0;

  for(;;)
  {
    if(osSemaphoreWait(MenuEvent, 100) == osOK)
    {
      switch(msc_demo.state)
      {
      case MSC_DEMO_IDLE:
        MSC_SelectItem(MSC_main_menu, 0); 
        msc_demo.state = MSC_DEMO_WAIT;
        msc_demo.select = 0;
        osSemaphoreRelease(MenuEvent);
        break;    
        
      case MSC_DEMO_WAIT:
        MSC_SelectItem(MSC_main_menu, msc_demo.select & 0x7F);
        
        /* Handle select item */
        if(msc_demo.select & 0x80)
        {
          switch(msc_demo.select & 0x7F)
          {
          case 0:
            msc_demo.state = MSC_DEMO_FILE_OPERATIONS; 
            osSemaphoreRelease(MenuEvent);
            break;
            
          case 1:
            msc_demo.state = MSC_DEMO_EXPLORER;  
            osSemaphoreRelease(MenuEvent);
            break;
            
          case 2:
            msc_demo.state = MSC_REENUMERATE; 
            osSemaphoreRelease(MenuEvent);
            break;
            
          default:
            break;
          }
        }
        break;
        
      case MSC_DEMO_FILE_OPERATIONS:  
        /* Read and Write File Here */
        if(Appli_state == APPLICATION_READY)
        {
          MSC_File_Operations();
        }
        msc_demo.state = MSC_DEMO_WAIT;
        break; 
        
      case MSC_DEMO_EXPLORER:
        /* Display disk content */
        if(Appli_state == APPLICATION_READY)
        {        
          Explore_Disk("0:/", 1);
        }
        msc_demo.state = MSC_DEMO_WAIT;
        break; 
        
      case MSC_REENUMERATE:
        /* Force MSC Device to re-enumerate */
        USBH_ReEnumerate(&hUSBHost); 
        msc_demo.state = MSC_DEMO_WAIT;
        break;
        
      default:
        break;
      } 
      msc_demo.select &= 0x7F;
    }

    if (osJoySemaphore != NULL)
    {      
      if(osSemaphoreWait(osJoySemaphore , 0) == osOK)
      {
        ITstatus = BSP_IO_ITGetStatus(JOY_ALL_PINS);
        if (ITstatus)
        {
          Joystick_MscMenu();
          /* Clear joystick interrupt pending bits */
          BSP_IO_ITClear();
        }
      }
    }
  }
}
コード例 #27
0
ファイル: spm_mailbox_nspe.c プロジェクト: 0xc0170/mbed
void on_popped_item(ipc_queue_item_t item)
{
    osStatus_t os_status = osSemaphoreRelease((osSemaphoreId_t)(item.b));
    MBED_ASSERT(osOK == os_status);
    PSA_UNUSED(os_status);
}
コード例 #28
0
ファイル: MBM_Port.C プロジェクト: github188/JSD-KB6120E_V2.x
void	vMBM_EventGet_Post( void )
{	//	设置接收完成标志
	osSemaphoreRelease( semaphore_RX );
}
コード例 #29
0
ファイル: main-ex4.c プロジェクト: Shreeyak/mastering-stm32
void delayThread(void const *argument) {
  while(1) {
    osDelay(500);
    osSemaphoreRelease(semid);
  }
}