コード例 #1
0
ファイル: led_task.c プロジェクト: BearZPY/STM32-uCOSIII
//led0任务函数
void led0_task(void *p_arg)
{
	OS_ERR err;
	u8 test[20];
	u8 times = 0;
	CPU_SR_ALLOC();
	u8 temp;	
	p_arg = p_arg;
	while(1)
	{
		OS_CRITICAL_ENTER();
		temp = FloatTaskTCB.MsgQ.NbrEntriesSize - FloatTaskTCB.MsgQ.NbrEntries;
		printf("que remain %d.\r\n",temp);
		OS_CRITICAL_EXIT();	
		sprintf((char *)test,"led_send_que %d",times++);
		printf("led0 task send que.\r\n");
		OSTaskQPost((OS_TCB*	)&FloatTaskTCB,	//向任务Msgdis发送消息
					(void*		)test,
          (OS_MSG_SIZE)20,
          (OS_OPT		)OS_OPT_POST_FIFO,
					(OS_ERR*	)&err);
				
		OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s	
			
	}
}
コード例 #2
0
ファイル: main.c プロジェクト: wms124/STM32_UCOSIII
//定时器1的回调函数
void tmr1_callback(void *p_tmr,void *p_arg)
{
	u8 *pbuf;
	static u8 msg_num;
	OS_ERR err;
	pbuf = mymalloc(SRAMIN,10);	//申请10个字节
	if(pbuf)	//申请内存成功
	{
		msg_num++;
		sprintf((char*)pbuf,"ALIENTEK %d",msg_num);
		//发送消息
		OSTaskQPost((OS_TCB*	)&Msgdis_TaskTCB,	//向任务Msgdis发送消息
                    (void*		)pbuf,
                    (OS_MSG_SIZE)10,
                    (OS_OPT		)OS_OPT_POST_FIFO,
					(OS_ERR*	)&err);
		if(err != OS_ERR_NONE)
		{
			myfree(SRAMIN,pbuf);	//释放内存
			OSTmrStop(&tmr1,OS_OPT_TMR_NONE,0,&err); //停止定时器1
			tmr1sta = !tmr1sta;
			LCD_ShowString(40,150,100,16,16,"TMR1 STOP! ");
		}
	}	
}
コード例 #3
0
ファイル: led_task.c プロジェクト: BearZPY/STM32-uCOSIII
//led0任务函数
void led0_task(void *p_arg)
{
	OS_ERR err;
	u8 test[20];
	u8 test1[20] = "abcde";
	u8 test2[20] = "12345";
	u8 test3[20] = "45678";
	
	u8 times = 0;
	CPU_SR_ALLOC();
	u8 temp;	
	p_arg = p_arg;
	while(1)
	{
		OS_CRITICAL_ENTER();
		temp = FloatTaskTCB.MsgQ.NbrEntriesSize - FloatTaskTCB.MsgQ.NbrEntries;
		printf("que remain %d.\r\n",temp);
		OS_CRITICAL_EXIT();	
		sprintf((char *)test,"led_send_que %d",times++);
		printf("led0 task send que.\r\n");
		//消息队列传送的是地址 且不会进行数据拷贝
		//同一地址传输速度比处理任务快 会导致数据被覆盖 造成数据丢失
		//消息队列传送的是需要读取某个地址的次数
		OSTaskQPost((OS_TCB*	)&FloatTaskTCB,	//向任务Msgdis发送消息
					(void*		)test,
          (OS_MSG_SIZE)20,
          (OS_OPT		)OS_OPT_POST_FIFO,
					(OS_ERR*	)&err);
		OSTaskQPost((OS_TCB*	)&FloatTaskTCB,	//向任务Msgdis发送消息
					(void*		)&test1,
          (OS_MSG_SIZE)20,
          (OS_OPT		)OS_OPT_POST_FIFO,
					(OS_ERR*	)&err);
		OSTaskQPost((OS_TCB*	)&FloatTaskTCB,	//向任务Msgdis发送消息
					(void*		)&test2,
          (OS_MSG_SIZE)20,
          (OS_OPT		)OS_OPT_POST_FIFO,
					(OS_ERR*	)&err);
		OSTaskQPost((OS_TCB*	)&FloatTaskTCB,	//向任务Msgdis发送消息
					(void*		)&test3,
          (OS_MSG_SIZE)20,
          (OS_OPT		)OS_OPT_POST_FIFO,
					(OS_ERR*	)&err);					
		OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s	
			
	}
}
コード例 #4
0
ファイル: stm32f10x_it.c プロジェクト: emlslxl/STM32_uCOS-III
void TIM2_IRQHandler()
{
    OS_ERR err;
    if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET)
    {
        OSIntEnter();
    	OSTaskQPost(&TIM2Hisr_TCB,NULL,0,NULL,&err);
        TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);
    	OSIntExit();
    }

}
コード例 #5
0
void TERM_TASK_sensor(void *p_arg)
{
  OS_ERR err;

  while(DEF_ON)
  {
    TERM_get_sensor_value(&acc_sensor_x, &acc_sensor_y);
    //acc_sensor_x=TERM_get_accsensor_x();
    OSTaskQPost((OS_TCB *)&TERM_TCB_motor_x, 		
	  (void *)acc_sensor_x,
	  (OS_MSG_SIZE)sizeof(acc_sensor_x),
	  (OS_OPT )OS_OPT_POST_FIFO,
	  (OS_ERR *)&err);    
    
    //acc_sensor_y=TERM_get_accsensor_y();
    OSTaskQPost((OS_TCB *)&TERM_TCB_motor_y, 		
      (void *)acc_sensor_y,
      (OS_MSG_SIZE)sizeof(acc_sensor_y),
      (OS_OPT )OS_OPT_POST_FIFO,
      (OS_ERR *)&err);
       
    OSTimeDlyHMSM(0, 0, 0, 500, OS_OPT_TIME_HMSM_STRICT, &err);    
  }
}
コード例 #6
0
void tasklet_schedule(struct tasklet_struct *t)
{
    OS_ERR err;
	CPU_SR cpu_sr;

    CPU_CRITICAL_ENTER();   
    if(t->state == TASKLET_STATE_SCHED)
    {
        CPU_CRITICAL_EXIT();
        return;
    }
    t->state = TASKLET_STATE_SCHED;
    CPU_CRITICAL_EXIT();
    
    OSTaskQPost(&TaskletActionTCB ,t,sizeof(struct tasklet_struct), OS_OPT_POST_FIFO,&err);
    if(err != OS_ERR_NONE)
        USBH_DBG("tasklet_schedule OSTaskQPost Failed %d\r\n",err);
    
}
コード例 #7
0
ファイル: ts_serv.c プロジェクト: DataCollect/lpc1768
void ts_recv_isr(void *recv_buff_0, void *recv_nbr_0)
{
    OS_ERR err;
    uint32_t i;
    uint32_t start_pos;
    uint8_t  *recv_buff = (uint8_t *)recv_buff_0;
    uint32_t *recv_nbr  = (uint32_t *)recv_nbr_0;
    uint32_t len;
    
    if (*recv_nbr >= TS_RECV_BUFF_LEN)
    {
        *recv_nbr = 0;
    }
    *recv_nbr += UART_Receive(LPC_UART0, recv_buff + *recv_nbr, \
                              TS_RECV_BUFF_LEN - *recv_nbr);
    
    start_pos = *recv_nbr - 1;
    if (*recv_nbr > MIN_RECV_LEN)   
    {
        for (i = 0; i < *recv_nbr-1; i++)
        {
            //if (recv_buff[i] == 0xa5 && recv_buff[i+1] == 0x5a)
            //if (recv_buff[i] == 0xa5 && recv_buff[i+1] == 0x5a)
            if (recv_buff[i] == START_CHAR)
            {
                start_pos = i;
                break;
            }
        }
    }
    else 
        return;

    if (start_pos < *recv_nbr - 1 )
    {  
        if (start_pos != 0)
        {
            for (i = 0; i < *recv_nbr - start_pos ; i++)
            {
                recv_buff[i] = recv_buff[i + start_pos];    
            }
            *recv_nbr -= start_pos;
        }

        if (*recv_nbr > MIN_RECV_LEN)
        {
            //if (*recv_nbr == recv_buff[2] + 3)
            if (recv_buff[*recv_nbr - 2] == END_CHAR_1 && recv_buff[*recv_nbr - 1] == END_CHAR_2)
            {
                len = *recv_nbr;
                
                recv_buff[len]     = recv_buff[4];
                recv_buff[len + 1] = recv_buff[5];
                recv_buff[len + 2] = recv_buff[6];
                
                Mem_Copy(recv_buff_copy, recv_buff, len + 3);
                *recv_nbr = 0;
                
                OSTaskQPost(&ts_serv_task_tcb,
                            (uint8_t *)recv_buff_copy,
                            len + 3,
                            OS_OPT_POST_FIFO,
                            &err);  
                
            }
        }
        else
            return;
    }
    else
    {
        *recv_nbr = 1;
         recv_buff[0] = recv_buff[start_pos];  
    }
   
}
コード例 #8
0
ファイル: stm32f10x_it.c プロジェクト: emlslxl/STM32_uCOS-III
/**
  * @brief  This function handles PPP interrupt request.
  * @param  None
  * @retval None
  */
void USART1_IRQHandler(void)
{
    OS_ERR err;
  u8 *memblk;
  u8 getChar;
  u32 i,index;

  if(USART_GetITStatus(USART1,USART_IT_RXNE) == SET)
  {
    USART_ClearITPendingBit(USART1,USART_IT_RXNE);
    getChar = (u8)USART_ReceiveData(USART1);
    switch(gUsart1RxState)
    {
      case USART1_RX_IDLE:
        switch(gUsart1RxStep)
        {
          case 0:
            if(getChar == 0x5F)
              gUsart1RxStep++;
            else
              gUsart1RxStep = 0;
            break;
          case 1:
            if(getChar == 0x5F)
              gUsart1RxStep++;
            else
              gUsart1RxStep = 0;
            break;
          case 2:
            gUsart1RxStep++;
            gUsart1RxLength = getChar;
            break;
          case 3:
            gUsart1RxStep++;
            gUsart1RxState = USART1_RX_BUSY;
            gUsart1RxPoint = gUsart1RxBuff;
            gUsart1RxLength = (u16)(getChar << 8)|(gUsart1RxLength);
            break;
          default:
            gUsartRxOver = 0;
            gUsart1RxStep = 0;
            gUsart1RxPoint = NULL;
            gUsart1RxState = USART1_RX_IDLE;
            break;
        }
        break;
      case USART1_RX_BUSY:
        index = gUsart1RxStep - 4;
        if((getChar == 0xAA)&&(gUsart1RxStep-4 == gUsart1RxLength))
        {
          gUsartRxOver = 1;
        }
        else if((getChar == 0x55)&&(gUsartRxOver == 1))
        {
          memblk = (u8*)AllocMem(gUsart1RxLength);
          if(memblk != NULL)
          {
            memset(memblk,0,gUsart1RxLength);
            for(i=0;i<gUsart1RxLength;i++)
            {
              memblk[i] = gUsart1RxBuff[i];
            }

            gUsartRxOver = 0;
            gUsart1RxStep = 0;
            gUsart1RxPoint = NULL;
            gUsart1RxState = USART1_RX_IDLE;

            OSTaskQPost(&MsgHandler_TCB,NULL,0,OS_OPT_POST_FIFO,&err);
          }

        }
        else
        {
          if((gUsart1RxStep-4) > gUsart1RxLength)
          {
            gUsartRxOver = 0;
            gUsart1RxStep = 0;
            gUsart1RxLength = 0;
            gUsart1RxPoint = NULL;
            gUsart1RxState = USART1_RX_IDLE;
          }
          gUsart1RxStep++;
          gUsart1RxPoint[index] = getChar;
        }
        break;
      default:
        gUsartRxOver = 0;
        gUsart1RxStep = 0;
        gUsart1RxLength = 0;
        gUsart1RxPoint = NULL;
        gUsart1RxState = USART1_RX_IDLE;
        break;
    }
  }
}