【UCOSIII】【自建消息队列OSQ】 【任务内建消息队列OSTaskQ】1个字节变量传递引用地址、指针变量malloc传递指针地址

【自建消息队列】
【任务内建消息队列】
1. 声明
//自建消息队列
OS_Q	OSQ_KEY;
OS_Q	OSQ_DATA;
#define OSQ_KEY_NUM 1
#define OSQ_DATA_NUM 4 	

//任务内建消息队列
#define TASK2_Q_NUM 1	//key2,up:led灯任务

2. 创建

//创建 自建消息队列
OSQCreate((OS_Q        *)&OSQ_KEY,
          (CPU_CHAR    *)"OSQ KEY",
          (OS_MSG_QTY   )OSQ_KEY_NUM,	//消息队列长度
          (OS_ERR      *)&err);
OSQCreate((OS_Q        *)&OSQ_DATA,
          (CPU_CHAR    *)"OSQ DATA",
          (OS_MSG_QTY   )OSQ_DATA_NUM,
          (OS_ERR      *)&err);

//任务 自建消息队列
//需要在创建任务时,指定消息队列的长度
OSTaskCreate((OS_TCB 	* )&Task2_TaskTCB,		
		(CPU_CHAR	* )"task2 task", 		
                 (OS_TASK_PTR )task2_task, 			
                 (void		* )0,					
                 (OS_PRIO	  )TASK2_TASK_PRIO,     
                 (CPU_STK   * )&TASK2_TASK_STK[0],	
                 (CPU_STK_SIZE)TASK2_STK_SIZE/10,	
                 (CPU_STK_SIZE)TASK2_STK_SIZE,		
                 (OS_MSG_QTY  )TASK2_Q_NUM,		            //设定消息队列的长度,默认为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);

3. post 发送消息队列

//自建消息队列 post
OSQPost((OS_Q         *)&OSQ_KEY,
	(void         *)&key,        //变量地址
	(OS_MSG_SIZE   )1,
	(OS_OPT        )OS_OPT_POST_FIFO,
	(OS_ERR       *)&err);	

//任务内建消息队列 post
OSTaskQPost((OS_TCB       *)&Task2_TaskTCB,		//任务内建信号量
	    (void         *)&key,
	    (OS_MSG_SIZE   )1,
	    (OS_OPT        )OS_OPT_POST_FIFO,
	    (OS_ERR       *)&err);	

4. pend 等待消息队列 使用
//自建 消息队列 pend
key = OSQPend((OS_Q         *)&OSQ_KEY,
               (OS_TICK       )0,
                (OS_OPT        )OS_OPT_PEND_BLOCKING,
                (OS_MSG_SIZE  *)&size,
                (CPU_TS       *)0,
                (OS_ERR       *)&err);	

//任务 内建消息队列 pend	
key = OSTaskQPend((OS_TICK       )0,
		(OS_OPT        )OS_OPT_PEND_BLOCKING,
		(OS_MSG_SIZE  *)&size,
		(CPU_TS       *)0,
		(OS_ERR       *)&err);	


应用例子:

发送1个字节变量 的消息队列

//消息队列post 发送给task2处理按键
OS_ERR err;
u8 key;
OSQPost((OS_Q         *)&OSQ_KEY,
	(void         *)&key,        //变量地址
	(OS_MSG_SIZE   )1,
	(OS_OPT        )OS_OPT_POST_FIFO,
	(OS_ERR       *)&err);		
//消息队列pend 等待
OS_ERR err;
OS_MSG_SIZE size;
u8 * key;
key = OSQPend((OS_Q         *)&OSQ_KEY,
                (OS_TICK       )0,
                (OS_OPT        )OS_OPT_PEND_BLOCKING,
                (OS_MSG_SIZE  *)&size,
                (CPU_TS       *)0,
                (OS_ERR       *)&err);	

发送字符串 的消息队列

//消息队列post
OS_ERR err;
char *pbuf= mymalloc(SRAMIN,10);
sprintf(pbuf,"%s cnt:%d \r\n",__FUNCTION__,cnt);
	
OSQPost((OS_Q         *)&OSQ_DATA,
	(void         *)pbuf,        //指针地址
	(OS_MSG_SIZE   )1,
	(OS_OPT        )OS_OPT_POST_FIFO,	//先进先出
	(OS_ERR       *)&err);

//消息队列pend
OS_ERR err;
OS_MSG_SIZE size;
u8 *data;
data = OSQPend((OS_Q         *)&OSQ_DATA,
		(OS_TICK       )0,
		(OS_OPT        )OS_OPT_PEND_BLOCKING,
		(OS_MSG_SIZE  *)&size,
		(CPU_TS       *)0,
		(OS_ERR       *)&err);
printf("%s\r\n",data);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值