コード例 #1
0
ファイル: os_time.c プロジェクト: redmorningcn/NC136B-320
void  OSTimeTick (void)
{
#if ((OS_CFG_TASK_TICK_EN == DEF_ENABLED) || (OS_CFG_TMR_EN == DEF_ENABLED))
    OS_ERR  err;
#endif


    if (OSRunning != OS_STATE_OS_RUNNING) {
        return;
    }

    OSTimeTickHook();                                           /* Call user definable hook                             */

#if (OS_CFG_TASK_TICK_EN == DEF_ENABLED)

   (void)OSTaskSemPost(&OSTickTaskTCB,                          /* Signal tick task                                     */
                        OS_OPT_POST_NONE,
                       &err);


#if (OS_CFG_SCHED_ROUND_ROBIN_EN == DEF_ENABLED)
    OS_SchedRoundRobin(&OSRdyList[OSPrioCur]);
#endif

#if (OS_CFG_TMR_EN == DEF_ENABLED)
    OSTmrUpdateCtr--;
    if (OSTmrUpdateCtr == 0u) {
        OSTmrUpdateCtr = OSTmrUpdateCnt;
        (void)OSTaskSemPost(&OSTmrTaskTCB,                      /* Signal timer task                                    */
                             OS_OPT_POST_NONE,
                            &err);
    }
#endif
#endif
}
コード例 #2
0
ファイル: demo_usart_echo.c プロジェクト: eyeye/LPC1788_Demos
void onRecvTimeout(void)
{
    OS_ERR  err;
    OSTaskSemPost(&USART_Echo_TCB,
                  OS_OPT_POST_NONE,
                  &err);
}
コード例 #3
0
ファイル: ZPH01.C プロジェクト: xz1996/Stm32_uCOSIII
//USART2接收DMA中断处理函数
void DMA1_Channel6_IRQHandler(void)
{
	OSIntEnter(); 
	
	if(DMA_GetITStatus(DMA1_IT_TC6)!=RESET)						//如果该DMA通道发生中断请求
	{
		OS_ERR err;
		
		DMA_Cmd(DMA1_Channel6,DISABLE);							//关闭DMA1_Channel6
		DMA_ClearITPendingBit(DMA1_IT_TC6);						//清除DMA的中断标志
		
		if(U2R_BufferNum==1)
		{
			DMA1_Channel6->CMAR=(u32)USART2_Rx_Buffer2;		//将缓冲区的地址改为2号
			U2R_BufferNum=2;
			U2R_Buf1_Ok=true;								//将1号缓存区标志位置为1,表示已满可读
			
		}
		else
		{
			DMA1_Channel6->CMAR=(u32)USART2_Rx_Buffer1;		//将缓冲区的地址改为1号
			U2R_BufferNum=1;	
			U2R_Buf2_Ok=true;								//将2号缓存区标志位置为1,表示已满可读
			
		}
		OSTaskSemPost(&ZPH01_Task_TCB,OS_OPT_POST_NONE,&err);//释放任务信号量
		USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);		//使能串口2的接收中断
	
	}
	
	OSIntExit();
}
コード例 #4
0
void USART2_IRQHandler(void)
{ 
  OS_ERR 	err;
  OSIntEnter();
  if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
  {
    /* Read one byte from the receive data register */
    /*使能串口2的发送和接收中断*/
    RxBuffer2[RxCounter2++] = USART_ReceiveData(USART2);
	USART_ClearITPendingBit(USART2, USART_IT_RXNE);
	if (RxBuffer2[RxCounter2-1]=='$')
	{
	   RxCounter = 0;
	}
	if (RxCounter<6) 
	{
	  RxBuffer[RxCounter++] =RxBuffer2[RxCounter2-1];
	}
    if (RxCounter2 == NbrOfDataToRead2)
    {
	    RxCounter2 = NbrOfDataToRead2;
		RxCounter = 0;
     	USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
		OSTaskSemPost((OS_TCB *)&task2TCB,        //这个是向系统软件定时任务//发送信号     
                      (OS_OPT  ) OS_OPT_POST_NONE,
                      (OS_ERR *)&err);
    } else
	if (RxBuffer2[RxCounter2-2]=='\r' && RxBuffer2[RxCounter2-1]=='\n')
	{
	    if ( RxBuffer[0]=='$' && RxBuffer[1]=='G' && RxBuffer[2]=='P'  
		     && RxBuffer[3]=='R' && RxBuffer[4]=='M'  && RxBuffer[5]=='C')
		{
			RxCounter = 0;
			RxCounter2 = NbrOfDataToRead2;
	     	USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
			OSTaskSemPost((OS_TCB *)&task2TCB,        //这个是向系统软件定时任务//发送信号     
                      (OS_OPT  ) OS_OPT_POST_NONE,
                      (OS_ERR *)&err);
		}  else
		{
		  	RxCounter = 0;
		}
	  
	}
  } 
  OSIntExit();
}
コード例 #5
0
void  OSTimeTick (void)
{
    OS_ERR  err;
#if OS_CFG_ISR_POST_DEFERRED_EN > 0u
    CPU_TS  ts;
#endif


    OSTimeTickHook();                                       /* Call user definable hook                               */

#if OS_CFG_ISR_POST_DEFERRED_EN > 0u

    ts = OS_TS_GET();                                       /* Get timestamp                                          */
    OS_IntQPost((OS_OBJ_TYPE) OS_OBJ_TYPE_TICK,             /* Post to ISR queue                                      */
                (void      *)&OSRdyList[OSPrioCur],
                (void      *) 0,
                (OS_MSG_SIZE) 0u,
                (OS_FLAGS   ) 0u,
                (OS_OPT     ) 0u,
                (CPU_TS     ) ts,
                (OS_ERR    *)&err);

#else

   (void)OSTaskSemPost((OS_TCB *)&OSTickTaskTCB,            /* Signal tick task                                       */
                       (OS_OPT  ) OS_OPT_POST_NONE,
                       (OS_ERR *)&err);


#if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u
    OS_SchedRoundRobin(&OSRdyList[OSPrioCur]);
#endif

#if OS_CFG_TMR_EN > 0u
    OSTmrUpdateCtr--;
    if (OSTmrUpdateCtr == (OS_CTR)0u) {
        OSTmrUpdateCtr = OSTmrUpdateCnt;
        OSTaskSemPost((OS_TCB *)&OSTmrTaskTCB,              /* Signal timer task                                      */
                      (OS_OPT  ) OS_OPT_POST_NONE,
                      (OS_ERR *)&err);
    }
#endif

#endif
}
コード例 #6
0
ファイル: os_time.c プロジェクト: redmorningcn/NC136B-320
void OSTimeDynTick (OS_TICK ticks)
{
    OS_ERR  err;
    CPU_SR_ALLOC();


    if (OSRunning != OS_STATE_OS_RUNNING) {
        return;
    }

    OSTimeTickHook();

    CPU_CRITICAL_ENTER();
    OSTickCtrPend += ticks;
    CPU_CRITICAL_EXIT();

    (void)OSTaskSemPost(&OSTickTaskTCB,                          /* Signal tick task                                     */
                         OS_OPT_POST_NONE,
                        &err);

}