UCOSIII再学习——1

创建一个任务:
//创建主任务
OSTaskCreate((OS_TCB 	* )&Main_TaskTCB,		
			 (CPU_CHAR	* )"Main task", 		
			 (OS_TASK_PTR )main_task, 			
			 (void		* )0,					
			 (OS_PRIO	  )MAIN_TASK_PRIO,     
			 (CPU_STK   * )&MAIN_TASK_STK[0],	//堆栈地址起始	
			 (CPU_STK_SIZE)MAIN_STK_SIZE/10,	//堆栈深度通常为堆栈大小的十分之一	
			 (CPU_STK_SIZE)MAIN_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_TMR		tmr1;	//定义一个定时器
//创建定时器1(当有时间延迟时,执行完一次时间延迟之后,每个周期再按照时间周期执行,单次还是循环则由周期模式决定)
OSTmrCreate((OS_TMR		*)&tmr1,		//定时器1
			(CPU_CHAR	*)"tmr1",		//定时器名字
			(OS_TICK	 )0,			//0ms			时间延迟
			(OS_TICK	 )50,          	//50*10=500ms	时间周期
			(OS_OPT		 )OS_OPT_TMR_PERIODIC, //周期模式
			(OS_TMR_CALLBACK_PTR)tmr1_callback,//定时器1回调函数
			(void	    *)0,			//参数为0
			(OS_ERR	    *)&err);		//返回的错误码

	定时器回调函数:
	void tmr1_callback(void *p_tmr,void *p_arg)
	

创建一个互斥信号量:OS_MUTEX	TEST_MUTEX;						//定义一个互斥信号量
创建一个信号量:	OS_SEM		MY_SEM;							//定义一个信号量,用于访问共享资源
请求信号量:OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); 	//请求信号量,此时别的任务不能访问共享资源
			memcpy(share_resource,task2_str,sizeof(task2_str));	//向共享资源区拷贝数据,将数据拷贝到共享资源区域
发送信号量:OSSemPost (&MY_SEM,OS_OPT_POST_1,&err);				//发送信号量,释放完成之后别的任务才能访问

OSSemPost发送一次信号量MY_SEM.Ctr++;
OSSemPend请求一次信号量MY_SEM.Ctr--;当OSSemPend请求一次后,当再次运行到到该函数时,如果没有OSSemPost则阻塞到该地方,

任务内嵌信号量:
请求信号量:	OSTaskSemPend(0,OS_OPT_PEND_BLOCKING,0,&err);			//请求任务内建的信号量
发送信号量:	OSTaskSemPost(&Task2_TaskTCB,OS_OPT_POST_NONE,&err);	//使用系统内建信号量向任务task2发送信号量


创建一个消息队列  :OS_Q 		DATA_Msg;				//定义一个消息队列,用于发送数据
消息队列剩余的个数:(总的-用的)DATA_Msg.MsgQ.NbrEntriesSize-DATA_Msg.MsgQ.NbrEntries
发送消息:
	OSQPost((OS_Q*		)&KEY_Msg,		
			(void*		)&key,
			(OS_MSG_SIZE)1,
			(OS_OPT		)OS_OPT_POST_FIFO,
			(OS_ERR*	)&err);
请求消息:
	//请求消息KEY_Msg
	key=OSQPend((OS_Q*			)&KEY_Msg,   
				(OS_TICK		)0,
				(OS_OPT			)OS_OPT_PEND_BLOCKING,
				(OS_MSG_SIZE*	)&size,		
				(CPU_TS*		)0,
				(OS_ERR*		)&err);

事件标志组:
#define KEY0_FLAG		0x01
#define KEY1_FLAG		0x02
#define KEYFLAGS_VALUE	0X00						
OS_FLAG_GRP	EventFlags;		//定义一个事件标志组

	flags_num=OSFlagPost((OS_FLAG_GRP*)&EventFlags,
						 (OS_FLAGS	  )KEY0_FLAG,
						 (OS_OPT	  )OS_OPT_POST_FLAG_SET,
						 (OS_ERR*	  )&err);
	flags_num=OSFlagPost((OS_FLAG_GRP*)&EventFlags,
						 (OS_FLAGS	  )KEY1_FLAG,
						 (OS_OPT	  )OS_OPT_POST_FLAG_SET,
						 (OS_ERR*     )&err);
	OSFlagPend((OS_FLAG_GRP*)&EventFlags,
			   (OS_FLAGS	)KEY0_FLAG+KEY1_FLAG,
			   (OS_TICK     )0,
			   (OS_OPT	    )OS_OPT_PEND_FLAG_SET_ALL+OS_OPT_PEND_FLAG_CONSUME,
			   (CPU_TS*     )0,
			   (OS_ERR*	    )&err);
原文地址:https://www.cnblogs.com/hhsxy/p/14018396.html