FreeRTOS——队列管理
1. 队列主要用于任务与任务、中断与任务之间的消息传递。
2. 创建队列时,请注意队列中数据单元的长度。
3. 通常情况,队列被作为FIFO(先进先出)使用,即数据从队列尾写入,从队列首读。当然,数据也可由队列首写入。
4. 向队列中写入数据是通过字节拷贝,将数据拷贝到队列中;从队列中读取数据也是通过字节拷贝,将数据从队列中拷贝出来。
说明:读数据分为两种情况:① 读取后,删除队列中的数据;② 读数据后,不删除队列中的数据。
5. 队列不属于任何任务。所有的任务或中断函数都可以向同一队列写入或读出。一般情况,一个队列可由多方写入,一方读出。
6. 多个任务因等待同一队列而阻塞,当队列有效时,只能有一个任务会被解除阻塞,这个任务就是所有等待任务中,优先级最高的任务。若优先级最高的任务有多个,那么解除阻塞的态的任务是对待时间最长的任务。
7. 写队列阻塞同读队列阻塞一样。
8. 队列传递结构体,实现混合型数据的传递。
9. 如果队列存储的数据单元较大,最好用队列传递数据的指针,而不是单字节的拷贝,但需要注意以下几点:
1)指针指向内存空间的所有权必须明确;
当任务间通过指针共享内存时,必须保证不会有任意两个任务同时修改内存中的数据,或其他行为使得数据无效或产生不一致的现象。
原则上,共享内存在其指针发送到队列前,其内容只允许被发送的任务间访问,共享内存指针从队列中被读出后,其内容也只允许被接收任务访问。
2)指针指向的内存空间必须有效。
如果内存是动态分配的,只应该有一个任务负责对其进行内存释放。当这段内存空间被释放后就不能以任何方式(任何任务),对这段内存进行访问。
3)不要使用指针访问任务栈上分配的空间。
因为栈帧发生改变时,栈上的数据将不再有效。
10. 在中断服务函数中使用队列相关函数,请使用中断安全版本,只有以”FromISR”或”FROM_ISR”结束的API 函数或宏才可以在中断服务例程中,详见参考手册。http://i.cnblogs.com/Files.aspx
FreeRTOS——队列管理的更多相关文章
- FreeRTOS系列第17篇---FreeRTOS队列
本文介绍队列的基本知识,具体源代码分析见<FreeRTOS高级篇5---FreeRTOS队列分析> 1.FreeRTOS队列 队列是基本的任务间通讯方式.能够在任务与任务间.中断和任务间传 ...
- mq队列管理器命令
dspmq: 队列管理器显示 QMCIPSA-------队列管理器 runmqsc QMSAA 运行查找Q队列名 运行MQ命令 runmqsc QmgrName 如果是默认队列管理器,可以不带其名 ...
- postfix队列管理
队列管理单元的服务器程序--qmgr,是整个postfix系统的中心枢纽.所有邮件,包括等待送出与从外界收进来的,都必须通过队列.了解队列的运行原理以及postfix如何处理队列,有助于你解决问题. ...
- hadoop队列管理(指定queue跑程序)
hadoop 升级到cdh5后,队列管理被取消,而是统一用资源池分配. hadoop2.0版本,Hadoop采用了平级队列组织方式,,管理员可将用户分到若干个扁平队列中,在每个队列中,可指定一个或几个 ...
- MQ队列管理器搭建(三)
MQ集群及网关队列管理器的搭建 描述: 如上图所示,为MQ的集群搭建部署图.CLUSTERA.CLUSTERB分别是两个集群,其中Qm1-Qm3.GateWayA为CLUSTERA集群中的队列 ...
- MQ队列管理器搭建(二)
MQ级联方式使用场景 使用场景: 如上图所示,Application1与Application2要进行通信或者消息互换,使用MQ中间件作为中介.上图中,Application1与Applica ...
- MQ队列管理器搭建(一)
多应用单MQ使用场景 如上图所示,MQ独立安装,或者与其中一个应用同处一机.Application1与Application2要进行通信,但因为跨系统,所以引入中间件来实现需求. Applicat ...
- com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 为队列管理器提供的安全性认证无效
com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 为队列管理器“zm_queue_manager”提供的安全性认证无效, ...
- Postfix常用命令和邮件队列管理(queue)
本文主要介绍一下postfix的常用命令及邮件队列的管理: Postfix有以下四种邮件队列,均由管理队列的进程统一进行管理: maildrop:本地邮件放置在maildrop中,同时也被拷贝到inc ...
随机推荐
- iOS CAReplicatorLayer 实现脉冲动画效果
iOS CAReplicatorLayer 实现脉冲动画效果 效果图 脉冲数量.速度.半径.透明度.渐变颜色.方向等都可以设置.可以用于地图标注(Annotation).按钮长按动画效果(例如录音按钮 ...
- 干货 | 云智慧透视宝Java代码性能监控实现原理
这篇图文并茂,高端大气上档次,思维缜密的文章,一看就和我平时的风格不同.对了.这不是我写的,是我家高大英俊,写一手好代码,做一手好菜的男神老公的大作,曾发表于技术公号,经本人授权转载~~ 一.Java ...
- oracle中的function的简单语法定义
1. create or replace 函数名 (参数名 in 类型) return 返回值类型 as 定义变量 begin 函数体 end;
- [BZOJ3675]序列分割
3675: [Apio2014]序列分割 Time Limit: 40 Sec Memory Limit: 128 MB Description 小H最近迷上了一个分隔序列的游戏.在这个游戏里,小H ...
- redis bitcount variable-precision swar算法
花了不到一周的时间看完了一本reids设计与实现的书,感觉整体的设计有些地方的确很巧妙,各个结构之间联系的非常紧密,但是很简单,逻辑性的没有太多,但是学到了一个bitcount计数1的方法比较巧妙,记 ...
- Windows系统前端常用PS快捷键:
1.设置滚轮放大缩小: 编辑--首选项--常规--用滚轮缩放 2.V 移动 ctrl+v 自动选中(图层), 3.M 选框 Shift+M 变换形状 Alt :确定圆形/矩形中心 Shift: 圆形/ ...
- C#中switch的使用
今天在网上看到有人给出这么一个程序需求,博主就拿来回忆回忆C#中switch的用法 程序需求如下: 根据星期几(一 ~日) ,输出特价菜“一”.“二”.“三”,输出“干煸扁豆6元.”“四”.“五”,输 ...
- printf和scanf整理(后续填补)
scanf和printf头文件:<stdio.h> 1.%d.%3d.%03d.%-3d区分 %d:以十进制形式输出整数(int) %3d:指定宽度为3,不足的左边补空格 %03d:一种左 ...
- mysql 修改表结构的字段名
alter table domains change STATUS status tinyint(1) not null;
- yii2.0修改默认的访问控制器