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——队列管理的更多相关文章

  1. FreeRTOS系列第17篇---FreeRTOS队列

    本文介绍队列的基本知识,具体源代码分析见<FreeRTOS高级篇5---FreeRTOS队列分析> 1.FreeRTOS队列 队列是基本的任务间通讯方式.能够在任务与任务间.中断和任务间传 ...

  2. mq队列管理器命令

    dspmq: 队列管理器显示 QMCIPSA-------队列管理器 runmqsc QMSAA  运行查找Q队列名 运行MQ命令 runmqsc QmgrName 如果是默认队列管理器,可以不带其名 ...

  3. postfix队列管理

    队列管理单元的服务器程序--qmgr,是整个postfix系统的中心枢纽.所有邮件,包括等待送出与从外界收进来的,都必须通过队列.了解队列的运行原理以及postfix如何处理队列,有助于你解决问题.  ...

  4. hadoop队列管理(指定queue跑程序)

    hadoop 升级到cdh5后,队列管理被取消,而是统一用资源池分配. hadoop2.0版本,Hadoop采用了平级队列组织方式,,管理员可将用户分到若干个扁平队列中,在每个队列中,可指定一个或几个 ...

  5. MQ队列管理器搭建(三)

    MQ集群及网关队列管理器的搭建 描述:     如上图所示,为MQ的集群搭建部署图.CLUSTERA.CLUSTERB分别是两个集群,其中Qm1-Qm3.GateWayA为CLUSTERA集群中的队列 ...

  6. MQ队列管理器搭建(二)

    MQ级联方式使用场景 使用场景:     如上图所示,Application1与Application2要进行通信或者消息互换,使用MQ中间件作为中介.上图中,Application1与Applica ...

  7. MQ队列管理器搭建(一)

    多应用单MQ使用场景 如上图所示,MQ独立安装,或者与其中一个应用同处一机.Application1与Application2要进行通信,但因为跨系统,所以引入中间件来实现需求.   Applicat ...

  8. com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 为队列管理器提供的安全性认证无效

    com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: 为队列管理器“zm_queue_manager”提供的安全性认证无效, ...

  9. Postfix常用命令和邮件队列管理(queue)

    本文主要介绍一下postfix的常用命令及邮件队列的管理: Postfix有以下四种邮件队列,均由管理队列的进程统一进行管理: maildrop:本地邮件放置在maildrop中,同时也被拷贝到inc ...

随机推荐

  1. nodejs零基础详细教程2:模块化、fs文件操作模块、http创建服务模块

    第二章  建议学习时间4小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑 ...

  2. 用WebStorm创建Express项目时出现:express version is unavailable

    那是因为在npm的配置文件中使用了代理: 方式一:查看配置:npm config list如果有:registry = "https://registry.npm.taobao.org/&q ...

  3. Java NIO学习笔记一 Java NIO概述

    Java NIO概述 Java NIO(新的IO)是Java的替代IO API(来自Java 1.4),这意味着替代标准的 java IO和java Networking API.Java NIO提供 ...

  4. node.js零基础详细教程(5):express 、 路由

    第五章 建议学习时间4小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...

  5. KNN算法介绍

    KNN算法全名为k-Nearest Neighbor,就是K最近邻的意思. 算法描述 KNN是一种分类算法,其基本思想是采用测量不同特征值之间的距离方法进行分类. 算法过程如下: 1.准备样本数据集( ...

  6. ThinkPHP3.2 生成二维码

    下面是整合将phpqrcode整合到TP生成二维码就可以解决这个问题了.其实也很简单,使用方法如下:先下载附件解压至ThinkPHP/Extend/Vendor目录,目录不存在自己创建.      v ...

  7. 版本控制工具svn的安装与简单使用

    版本控制工具多用于多人协作开发项目中,这不同于个人开发项目,想把自己代码怎样放置都可以,而且删除了代码很难查找. 版本控制工具类似于个人处理钱的过程,放于自己口袋管理类似于个人开发情形,如果自己钱丢了 ...

  8. sodu 命令场景分析

    摘自:http://www.cnblogs.com/hazir/p/sudo_command.html sudo 命令情景分析   Linux 下使用 sudo 命令,可以让普通用户也能执行一些或者全 ...

  9. Cordova各个插件使用介绍系列(四)—canvas2ImagePlugin保存二维码到手机本地

    详情链接地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/cordova-4-canvas2imageplugin/ 在前面几篇 ...

  10. Python的初步认识与基本模块的导入

    由于公司开发都使用了Python,老大说要每个人都会,前端也要学,所以就看着老大写的博客一步步来了,但是对于小白而言,一门新的语言总得跳许多坑.尤其是Mac安装Python,各种坑. 坑一.由于Mac ...