UCOSII消息队列
主结构体
typedef struct os_q { /* QUEUE CONTROL BLOCK */
struct os_q *OSQPtr; /* Link to next queue control block in list of free blocks */
void **OSQStart; /* Ptr to start of queue data */
void **OSQEnd; /* Ptr to end of queue data */
void **OSQIn; /* Ptr to where next message will be inserted in the Q */
void **OSQOut; /* Ptr to where next message will be extracted from the Q */
INT16U OSQSize; /* Size of queue (maximum number of entries) */
INT16U OSQEntries; /* Current number of entries in the queue */
} OS_Q;
typedef struct os_q_data {
void *OSMsg; /* Pointer to next message to be extracted from queue */
INT16U OSNMsgs; /* Number of messages in message queue */
INT16U OSQSize; /* Size of message queue */
OS_PRIO OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */
OS_PRIO OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
} OS_Q_DATA;
typedef struct os_event {
INT8U OSEventType; /* Type of event control block (see OS_EVENT_TYPE_xxxx) */
void *OSEventPtr; /* Pointer to message or queue structure */
INT16U OSEventCnt; /* Semaphore Count (not used if other EVENT type) */
OS_PRIO OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
OS_PRIO OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */
#if OS_EVENT_NAME_EN > 0u
INT8U *OSEventName;
#endif
} OS_EVENT;
API函数
//无等待地从消息队列中得到一个消息
void *OSQAccept (OS_EVENT *pevent,
INT8U *perr);
//创建
OS_EVENT *OSQCreate (void **start,
INT16U size);
//删除
OS_EVENT *OSQDel (OS_EVENT *pevent,
INT8U opt,
INT8U *perr);
//清空
INT8U OSQFlush (OS_EVENT *pevent);
//等待-1,接收消息
void *OSQPend (OS_EVENT *pevent,
INT32U timeout,
INT8U *perr);
//取消等待
INT8U OSQPendAbort (OS_EVENT *pevent,
INT8U opt,
INT8U *perr);
//释放+1,发送消息(队列式)
INT8U OSQPost (OS_EVENT *pevent,
void *pmsg);
//发送消息(堆栈式)
INT8U OSQPostFront (OS_EVENT *pevent,
void *pmsg);
//单选项的消息发送
INT8U OSQPostOpt (OS_EVENT *pevent,
void *pmsg,
INT8U opt);
//查询
INT8U OSQQuery (OS_EVENT *pevent,
OS_Q_DATA *p_q_data);
应用举例
#define OSQ_MSG_NUM 1 //消息队列消息数量
OS_EVENT *DATA_Msg;
void *MsgGrp[OSQ_MSG_NUM];
void start_task(void *pdata)
{
OS_CRITICAL_ENTER(); //进入临界区
DATA_Msg = OSQCreate ((void** )&MsgGrp[0],
(INT16U )OSQ_MSG_NUM);
OS_EXIT_CRITICAL();
}
void msgpost_task(void *p_arg)
{
static u8 msg_num;
OS_Q_DATA p_q_data;
OSQQuery(DATA_Msg, &p_q_data);
if(p_q_data.OSNMsgs >= OSQ_MSG_NUM)
{
printf("OSQQuery OSNMsgs: %d\r\n", p_q_data.OSNMsgs);
return;
}
msg_num++;
OSQPost((OS_EVENT* )DATA_Msg,
(void* )&msg_num);
}
void msgpend_task(void *p_arg)
{
void *p;
INT8U err;
u8 msg_num;
p = OSQPend((OS_EVENT* )DATA_Msg,
(INT32U )0,
(INT8U* )&err);
msg_num = *p;
}
UCOSII消息队列的更多相关文章
- ucosii事件控制块------消息邮箱与消息队列
UCOSII 使用叫做事件控制块(ECB)的数据结构来描述诸如信号量.邮箱(消息邮箱)和消息队列这些事件 #define OS_EVENT_EN (((OS_Q_EN > 0u) &&a ...
- FreeRTOS 消息队列
以下基础内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 的一个重要的通信机制----消息队列,初学者要熟练掌握,因为消息 ...
- FreeRTOS消息队列
FreeRTOS 的一个重要的通信机制----消息队列,消息队列在实际项目中应用较多. 一.消息队列的作用及概念: 消息队列就是通过 RTOS 内核提供的服务,任务或中断服务子程序可以将一个消息(注意 ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- 消息队列 Kafka 的基本知识及 .NET Core 客户端
前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...
- .net 分布式架构之业务消息队列
开源QQ群: .net 开源基础服务 238543768 开源地址: http://git.oschina.net/chejiangyi/Dyd.BusinessMQ ## 业务消息队列 ##业务消 ...
- 【原创经验分享】WCF之消息队列
最近都在鼓捣这个WCF,因为看到说WCF比WebService功能要强大许多,另外也看了一些公司的招聘信息,貌似一些中.高级的程序员招聘,都有提及到WCF这一块,所以,自己也关心关心一下,虽然目前工作 ...
- Java消息队列--ActiveMq 实战
1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...
- Java消息队列--JMS概述
1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...
随机推荐
- Mac使用秘钥登录Linux服务器
简介 在 Mac 上配置 SSH 密钥登录远程的 Linux 相关配置 1.创建本地的 SSH 密钥 本地 生成秘钥对 ssh-keygen -t rsa -C 'youxiang@aliyun.co ...
- Spark2.x(五十七):User capacity has reached its maximum limit(用户容量已达到最大限制)
背景: 目前服务器资源是43个节点,每个节点配置信息如下:24VCores 64G yarn配置情况: yarn.scheduler.minimum-allocation-mb 单个容器可申请的最小 ...
- Tracking without bells and whistles
Tracking without bells and whistles 2019-08-07 20:46:12 Paper: https://arxiv.org/pdf/1903.05625 Code ...
- C#发起Http请求,调用接口
//方法1. Post 异步请求,普通的异步请求,传输普通的字符串等,对于有html代码的字段值的传输支持不好,如果需要传输html,二进制等数据的传输,请使用下面第二个方法,即使用UploadDat ...
- Qt编写安防视频监控系统14-本地回放
一.前言 在上一篇文章将视频文件存储好了,需要提供界面方便用户查询视频文件进行回放,其实这个回放就是播放历史存储的视频文件,并不是什么高大上的东西,视频回放在这个系统中分三种,第一种是本地回放,回放存 ...
- [LeetCode] 412. Fizz Buzz 嘶嘶嗡嗡
Write a program that outputs the string representation of numbers from 1 to n. But for multiples of ...
- LeetCode:字符串相加【415】
LeetCode:字符串相加[415] 题目描述 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100.num1 和num2 都只 ...
- UE4 window打包ios备忘
1.生成SHH key 2.安装证书 *.cer,*.p12 以下转自:http://wangjie.rocks/2017/11/30/ue4-ios-build-on-windows/ 问题一 12 ...
- 【Tools】HP/惠普v285w 量产工具
前段时间朋友说自己u盘坏了,让帮忙看看.看下图是这个u盘. 坏的问题:往里面复制东西,提示:请去掉写保护或使用另一张磁盘.但是能正常从里面读取出来数据. 无论更换电脑,还是使用网上的修改注册表等方式皆 ...
- 安装 gearman
准备:php 对应gearman插件包 https://pecl.php.net/package/gearman 1. 先安装依赖库 [root@VM_27_0_centos /]# yum inst ...