【UCOSIII】【OS常用函数集合】时间管理、任务管理、信号量、软件定时器

时间管理

/*时间管理*/
OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err);//1s延迟

任务操作

/*任务操作:创建、删除、挂起、恢复*/
OS_TCB	Task1_TaskTCB;
void task1_task(void *p_arg);
#define TASK1_TASK_PRIO	5
#define TASK1_STK_SIZE	64
CPU_STK	TASK1_TASK_STK[TASK1_STK_SIZE];

OSTaskCreate((OS_TCB 	* )&Task1_TaskTCB,		
		 (CPU_CHAR	* )"task1 task", 		
		 (OS_TASK_PTR )task1_task, 			
		 (void		* )0,					
		 (OS_PRIO	  )TASK1_TASK_PRIO,     
		 (CPU_STK   * )&TASK1_TASK_STK[0],	
		 (CPU_STK_SIZE)TASK1_STK_SIZE/10,	
		 (CPU_STK_SIZE)TASK1_STK_SIZE,		
		 (OS_MSG_QTY  )0,					
		 (OS_TICK	  )2,	//2个时间片,2*5ms = 10ms				
		 (void   	* )0,					
		 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
		 (OS_ERR 	* )&err);	
void task1_task(void *p_arg)
{
	OS_ERR err;
	while(1)
	{
	
	}
}
//OSTaskDel((OS_TCB*)&Task2_TaskTCB,&err);		//任务删除
//OSTaskSuspend((OS_TCB*)&Task2_TaskTCB,&err);	//任务挂起			
//OSTaskResume((OS_TCB*)&Task2_TaskTCB,&err);		//任务恢复
//OSSched();	//任务级调度

信号量

普通信号量、互斥信号量、任务内嵌信号量

/*信号量操作:普通信号量、互斥信号量、任务内嵌信号量*/
//普通信号量
OS_SEM	 SEM_1;			//普通信号量
OSSemCreate((OS_SEM      *)&SEM_1,		
			(CPU_CHAR    *)"SEM_1",   
			(OS_SEM_CTR   )1,   					//初始化 信号量 值为0
			(OS_ERR      *)&err	);   				   	
OSSemPend(&SEM_1,0,OS_OPT_PEND_BLOCKING,0,&err);	//等待信号量 请求
OSSemPost(&SEM_1,OS_OPT_POST_1,&err); //发送信号量 释放 信号量+1	

//创建互斥信号量
OS_MUTEX MUTEX_1;		//互斥信号量,防止优先级反转
OSMutexCreate((OS_MUTEX  *)&MUTEX_1,
			  (CPU_CHAR  *)"MUTEX_1",
			  (OS_ERR    *)&err);
OSMutexPend((OS_MUTEX  *)&MUTEX_1,		//请求互斥信号量
		   (OS_TICK    )0,
		   (OS_OPT     )OS_OPT_PEND_BLOCKING,
		   (CPU_TS    *)0,
		   (OS_ERR    *)&err);		
OSMutexPost((OS_MUTEX  *)&MUTEX_1,		//释放互斥信号量
		   (OS_OPT     )OS_OPT_POST_NONE,
		   (OS_ERR    *)&err);

//任务内嵌信号量 不用创建
//
OSTaskSemPend((OS_TICK   )0,						//请求系统内部信号量 1s请求一次 Task7_TaskTCB.SemCtr
			  (OS_OPT    )OS_OPT_PEND_BLOCKING,
			  (CPU_TS   *)0,
			  (OS_ERR   *)&err);
OSTaskSemPost((OS_TCB   *)&Task7_TaskTCB,		//释放系统内部信号量 Task7_TaskTCB.SemCtr
			  (OS_OPT    )OS_OPT_POST_NONE,
			  (OS_ERR   *)&err);
			

软件定时器

/*软件定时器*/
//创建软件定时器1、2 
OS_TMR tmr1;
void tmr1_callback(void *p_tmr, void *p_arg);//声明
OSTmrCreate (  (OS_TMR               *)&tmr1,	//定时器分辨率10ms 
			   (CPU_CHAR             *)"tmr1",
			   (OS_TICK               )500,		//初始化延迟 500*10ms = 5s
			   (OS_TICK               )100,		//周期 100*10ms = 1s
			   (OS_OPT                )OS_OPT_TMR_PERIODIC,	//有初始化延迟的周期定时器模式
			   (OS_TMR_CALLBACK_PTR   )tmr1_callback,
			   (void                 *)0,
			   (OS_ERR               *)&err	);	
OSTmrStart(&tmr1,&err);//开启定时器1
OSTmrStop(&tmr1,OS_OPT_TMR_NONE,0,&err);	//关闭定时器1
void tmr1_callback(void *p_tmr, void *p_arg)
{
	static u8 cnt=0;
	cnt++;
	printf("%s cnt:%d \r\n",__FUNCTION__,cnt);
	LED1=~LED1;
}

猜你喜欢

转载自blog.csdn.net/qq1518572311/article/details/80533869