void task_2()
{
  while(1)
	{
		task2count++;
		uart1.printf("Task 2 Running!!!,runtimes = %d\r\n",task2count);
		if(task2count%5 == 0)
		{
			uart1.printf("------Task 2 suspend!--------\r\n");
			OS_TaskSuspend(TASK2_PRIO);

		}
		OS_DelayTimes(1000);
	}

}
Exemple #2
0
//开始任务函数
void start_task(void *p_arg)
{
	OS_ERR err;
	CPU_SR_ALLOC();
	p_arg = p_arg;

	CPU_Init();
#if OS_CFG_STAT_TASK_EN > 0u
   OSStatTaskCPUUsageInit(&err);  	//统计任务                
#endif
	
#ifdef CPU_CFG_INT_DIS_MEAS_EN		//如果使能了测量中断关闭时间
    CPU_IntDisMeasMaxCurReset();	
#endif
	
#if	OS_CFG_SCHED_ROUND_ROBIN_EN  //当使用时间片轮转的时候
	 //使能时间片轮转调度功能,时间片长度为1个系统时钟节拍,既1*5=5ms
	OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);  
#endif		
	
	OS_CRITICAL_ENTER();	//进入临界区
	 
	OSTaskCreate((OS_TCB 	* )&Led0TaskTCB,		
			 (CPU_CHAR	* )"led0 task", 		
							 (OS_TASK_PTR )led0_task, 			
							 (void		* )0,					
							 (OS_PRIO	  )LED0_TASK_PRIO,     
							 (CPU_STK   * )&LED0_TASK_STK[0],	
							 (CPU_STK_SIZE)LED0_STK_SIZE/10,	
							 (CPU_STK_SIZE)LED0_STK_SIZE,		
							 (OS_MSG_QTY  )0,					
							 (OS_TICK	  )0,					
							 (void   	* )0,					
							 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
							 (OS_ERR 	* )&err);				
				 
	OS_TaskSuspend((OS_TCB*)&StartTaskTCB,&err);		//挂起开始任务			 
	OS_CRITICAL_EXIT();	//进入临界区
}
void  OS_IntQRePost (void)
{
#if (OS_CFG_TMR_EN == DEF_ENABLED)
    CPU_TS  ts;
#endif
    OS_ERR  err;


    switch (OSIntQOutPtr->Type) {                               /* Re-post to task                                      */
        case OS_OBJ_TYPE_FLAG:
#if (OS_CFG_FLAG_EN == DEF_ENABLED)
             (void)OS_FlagPost((OS_FLAG_GRP *) OSIntQOutPtr->ObjPtr,
                                OSIntQOutPtr->Flags,
                                OSIntQOutPtr->Opt,
#if (OS_CFG_TS_EN == DEF_ENABLED)
                                OSIntQOutPtr->TS,
#else
                                0u,
#endif
                               &err);
#endif
             break;

        case OS_OBJ_TYPE_Q:
#if (OS_CFG_Q_EN == DEF_ENABLED)
             OS_QPost((OS_Q *) OSIntQOutPtr->ObjPtr,
                       OSIntQOutPtr->MsgPtr,
                       OSIntQOutPtr->MsgSize,
                       OSIntQOutPtr->Opt,
#if (OS_CFG_TS_EN == DEF_ENABLED)
                        OSIntQOutPtr->TS,
#else
                        0u,
#endif
                      &err);
#endif
             break;

        case OS_OBJ_TYPE_SEM:
#if (OS_CFG_SEM_EN == DEF_ENABLED)
             (void)OS_SemPost((OS_SEM *) OSIntQOutPtr->ObjPtr,
                               OSIntQOutPtr->Opt,
#if (OS_CFG_TS_EN == DEF_ENABLED)
                               OSIntQOutPtr->TS,
#else
                               0u,
#endif
                              &err);
#endif
             break;

        case OS_OBJ_TYPE_TASK_MSG:
#if (OS_CFG_TASK_Q_EN == DEF_ENABLED)
             OS_TaskQPost((OS_TCB    *) OSIntQOutPtr->ObjPtr,
                          (void      *) OSIntQOutPtr->MsgPtr,
                           OSIntQOutPtr->MsgSize,
                           OSIntQOutPtr->Opt,
#if (OS_CFG_TS_EN == DEF_ENABLED)
                           OSIntQOutPtr->TS,
#else
                           0u,
#endif
                          &err);
#endif
             break;

        case OS_OBJ_TYPE_TASK_RESUME:
#if (OS_CFG_TASK_SUSPEND_EN == DEF_ENABLED)
             (void)OS_TaskResume((OS_TCB *) OSIntQOutPtr->ObjPtr,
                                 &err);
#endif
             break;

        case OS_OBJ_TYPE_TASK_SIGNAL:
             (void)OS_TaskSemPost((OS_TCB *) OSIntQOutPtr->ObjPtr,
                                   OSIntQOutPtr->Opt,
#if (OS_CFG_TS_EN == DEF_ENABLED)
                                   OSIntQOutPtr->TS,
#else
                                   0u,
#endif
                                  &err);
             break;

        case OS_OBJ_TYPE_TASK_SUSPEND:
#if (OS_CFG_TASK_SUSPEND_EN == DEF_ENABLED)
             (void)OS_TaskSuspend((OS_TCB *) OSIntQOutPtr->ObjPtr,
                                  &err);
#endif
             break;

        case OS_OBJ_TYPE_TICK:
#if (OS_CFG_TASK_TICK_EN == DEF_ENABLED)
#if (OS_CFG_SCHED_ROUND_ROBIN_EN == DEF_ENABLED)
             OS_SchedRoundRobin(&OSRdyList[OSPrioSaved]);
#endif

             (void)OS_TaskSemPost((OS_TCB *)&OSTickTaskTCB,     /* Signal tick task                                     */
                                   OS_OPT_POST_NONE,
#if (OS_CFG_TS_EN == DEF_ENABLED)
                                   OSIntQOutPtr->TS,
#else
                                   0u,
#endif
                                  &err);
#endif

#if (OS_CFG_TMR_EN == DEF_ENABLED)
             OSTmrUpdateCtr--;
             if (OSTmrUpdateCtr == 0u) {
                 OSTmrUpdateCtr = OSTmrUpdateCnt;
#if (OS_CFG_TS_EN == DEF_ENABLED)
                 ts             = OS_TS_GET();                  /* Get timestamp                                        */
#else
                 ts             = 0u;
#endif
                 (void)OS_TaskSemPost(&OSTmrTaskTCB,            /* Signal timer task                                    */
                                       OS_OPT_POST_NONE,
                                       ts,
                                      &err);
             }
#endif
             break;

        default:
             break;
    }
}
void  OS_IntQRePost (void)
{
    CPU_TS  ts;
    OS_ERR  err;


    switch (OSIntQOutPtr->Type) {                           /* Re-post to task                                        */
        case OS_OBJ_TYPE_FLAG:
#if OS_CFG_FLAG_EN > 0u
             (void)OS_FlagPost((OS_FLAG_GRP *) OSIntQOutPtr->ObjPtr,
                               (OS_FLAGS     ) OSIntQOutPtr->Flags,
                               (OS_OPT       ) OSIntQOutPtr->Opt,
                               (CPU_TS       ) OSIntQOutPtr->TS,
                               (OS_ERR      *)&err);
#endif
             break;

        case OS_OBJ_TYPE_Q:
#if OS_CFG_Q_EN > 0u
             OS_QPost((OS_Q      *) OSIntQOutPtr->ObjPtr,
                      (void      *) OSIntQOutPtr->MsgPtr,
                      (OS_MSG_SIZE) OSIntQOutPtr->MsgSize,
                      (OS_OPT     ) OSIntQOutPtr->Opt,
                      (CPU_TS     ) OSIntQOutPtr->TS,
                      (OS_ERR    *)&err);
#endif
             break;

        case OS_OBJ_TYPE_SEM:
#if OS_CFG_SEM_EN > 0u
             (void)OS_SemPost((OS_SEM *) OSIntQOutPtr->ObjPtr,
                              (OS_OPT  ) OSIntQOutPtr->Opt,
                              (CPU_TS  ) OSIntQOutPtr->TS,
                              (OS_ERR *)&err);
#endif
             break;

        case OS_OBJ_TYPE_TASK_MSG:
#if OS_CFG_TASK_Q_EN > 0u
             OS_TaskQPost((OS_TCB    *) OSIntQOutPtr->ObjPtr,
                          (void      *) OSIntQOutPtr->MsgPtr,
                          (OS_MSG_SIZE) OSIntQOutPtr->MsgSize,
                          (OS_OPT     ) OSIntQOutPtr->Opt,
                          (CPU_TS     ) OSIntQOutPtr->TS,
                          (OS_ERR    *)&err);
#endif
             break;

        case OS_OBJ_TYPE_TASK_RESUME:
#if OS_CFG_TASK_SUSPEND_EN > 0u
             (void)OS_TaskResume((OS_TCB *) OSIntQOutPtr->ObjPtr,
                                 (OS_ERR *)&err);
#endif
             break;

        case OS_OBJ_TYPE_TASK_SIGNAL:
             (void)OS_TaskSemPost((OS_TCB *) OSIntQOutPtr->ObjPtr,
                                  (OS_OPT  ) OSIntQOutPtr->Opt,
                                  (CPU_TS  ) OSIntQOutPtr->TS,
                                  (OS_ERR *)&err);
             break;

        case OS_OBJ_TYPE_TASK_SUSPEND:
#if OS_CFG_TASK_SUSPEND_EN > 0u
             (void)OS_TaskSuspend((OS_TCB *) OSIntQOutPtr->ObjPtr,
                                  (OS_ERR *)&err);
#endif
             break;

        case OS_OBJ_TYPE_TICK:
#if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u
             OS_SchedRoundRobin(&OSRdyList[OSPrioSaved]);
#endif

             (void)OS_TaskSemPost((OS_TCB *)&OSTickTaskTCB,                /* Signal tick task                        */
                                  (OS_OPT  ) OS_OPT_POST_NONE,
                                  (CPU_TS  ) OSIntQOutPtr->TS,
                                  (OS_ERR *)&err);
#if OS_CFG_TMR_EN > 0u
             OSTmrUpdateCtr--;
             if (OSTmrUpdateCtr == (OS_CTR)0u) {
                 OSTmrUpdateCtr = OSTmrUpdateCnt;
                 ts             = OS_TS_GET();                             /* Get timestamp                           */
                 (void)OS_TaskSemPost((OS_TCB *)&OSTmrTaskTCB,             /* Signal timer task                       */
                                      (OS_OPT  ) OS_OPT_POST_NONE,
                                      (CPU_TS  ) ts,
                                      (OS_ERR *)&err);
             }
#endif
             break;

        default:
             break;
    }
}
Exemple #5
0
//�رմ��������룬�ⲿ��������
void Q_DisableInput(void)
{
	Disable_Touch_Inperrupt();
	OS_TaskSuspend(KeysHandler_Task_Handle);//���𰴼�����߳�
}