FreeRTOS学习笔记7-FreeRTOS 队列相关

   在实际的应用中,常会遇到一个任务或者断服需要和另外进 在实际的应用中,常会遇到一个任务或者断服需要和另外进 行“沟通交流”, 行“沟通交流”, 行“沟通交流”, 这个“沟通交流”的过程其实就是消息传递 这个“沟通交流”的过程其实就是消息传递 这个“沟通交流”的过程其实就是消息传递 这个“沟通交流”的过程其实就是消息传递 的过程。在 的过程。在 没有操作系统的时候两个应用程序进行 没有操作系统的时候两个应用程序进行 没有操作系统的时候两个应用程序进行 没有操作系统的时候两个应用程序进行 消息传递一般使用全局变量的方式,但是如果 消息传递一般使用全局变量的方式,但是如果 消息传递一般使用全局变量的方式,但是如果 消息传递一般使用全局变量的方式,但是如果 在使用 操作系统的 操作系统的 应用中 应用中 用全局变量 用全局变量 来传递消息 就会涉及到“资源管理”的问题。 就会涉及到“资源管理”的问题。

1、什么是队列

  队列是为了任务和任务直接进行通信,一般采取FIFO(先进先出)的缓冲机制。也可以使用LOFO(先进后出)的缓冲机制。在传递时采用值传递的方式进行传输。不使用数据引用。采用值传递的方式消息必须一直可见,即:消息内容必须有效。

  队列不属于某个特定的任务,所有任务都可以使用队列,在任务在读取队列数据的时候,都可以指定一个阻塞时间,这个阻塞时间就是当任务从队列里读取消息无效的时候任务阻塞的时间。出队就是从队列里读取消息,出队阻塞是针对从队列中读取消息的任务而言的。

  入队阻塞:入队说的是向队列中发送消息,将消息加入到队列中。和出队阻塞一样,当一个任务向队列发送消息的话也可以设置阻塞时间。比如任务B 向消息队列Q 发送消息,但是此时队列Q 是满的,那肯定是发送失败的。此时任务B 就会遇到和上面任务A 一样的问题,这两种情况的处理过程是类似的,只不过一个是向队列Q 发送消息,一个是从队列Q 读取消息而已。

队列操作图示:

图 13.1.4中任务 中任务 B从队列中读取消息, 从队列中读取消息, 并将读取到的消息值赋给 y,这样 y就等于 10了。任务了。任务 B从队列中读取消息完成以后可选择清除掉这个或者不。 当选择清除这个 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 消息的话其他任务或中断就不能获取这个了,而且队列剩余大小会加一变成 3。如果 不清除的话其他任务或中断也可以获取这个消息, 而队列剩余大小 依旧是 2。

  这两张图清晰的展示了队列的操作过程,了解队列的机制即可,有关队列的创建,初始化,队列的复位等函数查阅相关资料。不在详细赘述。

  2、向队列发送消息:

  FreeRTOS一共有8个函数向队列发送数据。具体如下表:

  函数详解看手册或查资料。注意这些函数一般都需要打开宏来支持。

  

  

时间: 2024-10-06 12:17:51

FreeRTOS学习笔记7-FreeRTOS 队列相关的相关文章

FreeRTOS学习笔记——二值型信号量

1.前言 在嵌入式操作系统中二值型信号量是任务间.任务与中断间同步的重要手段.FreeRTOS的二值型信号量简单易用,下面结合一个具体例子说明FreeRTOS中的二值型信号量如何使用. [相关博文] [FreeRTOS STM32移植笔记] [FreeRTOS学习笔记--任务间使用队列同步数据] [如何在FreeRTOS下实现低功耗--MSP430F5438平台] [代码链接]--示例代码存于百度网盘 2.特别说明         二值型信号量的使用方法见图1所示,二值型信号量可以理解为任务与中

FreeRTOS学习笔记2

FreeRTOS函数原型解析: portBASE_TYPE xTaskCreate( pdTASK_CODE pvTaskCode, const signed portCHAR * const pcName,              unsigned portSHORT usStackDepth,              void *pvParameters,              unsigned portBASE_TYPE uxPriority,.              xTas

FreeRTOS学习笔记4

FreeRTOS配置管理: 网上移植教程较多,也可以使用官方提供的各种Demo工程进行移植,不在详细介绍.本文主要介绍FreeRTOS移植成功后进行的配置方式.使其成为自己最匹配最精简,最适用的系统. FreeRTOSConfig.h几乎包含了所有需要的配置.下文讲述主要的几项配置: 包含INCLUDE_...的宏定义.所有这些宏都是条件编译所需的.可以根据自身需要进行定义.例如INCLUDE_xTaskAbortDelay是需要使用函数 xTaskAbortDelay()时定义为1.这样做的好

FreeRTOS学习笔记5-静态方式创建任务函数

配置完成后的进行任务创建,使用静态方式创建任务时需要使将宏 configSUPPORT_STATIC_ALLOCATION设置为 1,即使用静态内存.还需要将函数 vApplicationGetIdleTaskMemory()和 ApplicationGetTimerTaskMemory()进行实现.通过这两个函数来给空闲任务 和定时器服的任务堆 栈和任务控制块分配内存.在maiinc.c中进行定义.定义静态的任务堆栈和任务控制块内存,然后将这些内存传递给函数参数.最后创建空闲任务和定时器任务的

FreeRTOS 学习笔记 1

之所以要学习 FreeRTOS,不是因为它多么出众,仅仅是因为公司要做的项目使用的芯片上有它,而我是后参与进来的,之前就听到前面的人说这部分比较难,所以就来学一下,免得做项目的时候抓瞎,所以我现在也不知道他到底难不难,完全没 Feel . Ps:对于前人的指教还是比较信任的...反正总不会害我... 这一次也要开始使用 Keil,以前一直用的是 IAR,熟悉一下应该也没有问题... 本人英语不是很好,幸好 Zou Changjun 前辈翻译了中文版,感谢 Zou Changjun 前辈... 桌

FreeRTOS 学习笔记 5 —— 调度算法.简述

优先级抢占式调度: 1. 每个任务都赋予了一个优先级. 2. 每个任务都可以存在于一个或多个状态. 3. 在任何时候都只有一个任务可以处于运行状态. 4. 调度器总是在所有处于就绪态的任务中选择具有最高优先级的任务来执行. 这种类型的调度方案被称为"固定优先级抢占式调度".所谓"固定优先级"是指每个任务都被赋予了一个优先级,这个优先级不能被内核本身改变(只能被任务修改)."抢占式"是指当任务进入就绪态或是优先级被改变时,如果处于运行态的任务优先级

C++学习笔记50:队列类模板

队列是只能向一端添加元素,从另一端删除元素的线性群体 循环队列 在想象中将数组弯曲成环形,元素出队时,后继元素不移动,每当队尾达到数组最后一个元素时,便再回到数组开头. 队列类模板 //Queue.h #ifndef QUEUE_H #define QUEUE_H #include <cassert> //类模板的定义 template <class T, int SIZE = 50> class Queue { private: int front, rear, count; T

C++ 学习笔记之 STL 队列

一.  引言 在算法以及数据结构的实现中,很多地方我们都需要队列(遵循FIFO,先进先出原则). 为了使用队列,我们可以自己用数组来实现队列,但自己写太麻烦不说,并且还很容易出错. 好在C++的STL(标准模板库)为我们实现了一个强大的队列,它包含在头文件<queue>中. 二.    queue a)     构造函数 下面用例子来展示queue的构造函数 deque<int> deck(3,100); list<int> mylist(2,100); queue&l

PetShop 4.0学习笔记:消息队列MSMQ

直到今天才知道,在我们每天都在用的Window系统里还有这么好用的一个编程组件:消息队列.它能够解决在大数据量交换的情况下的性能问题,特别是BS系统的数据库性能.而且它的异步处理方式能给程序员最大的便利与最好的用户体验. 1.首先在需要进行消息队列的服务器上安装MSMQ,我的系统是win2003+iis6,所以这个安装选项在添加删除程序->windows组件->应用程序服务器内.默认是不安装的,需要手动选择. 2.建立消息队列的存放路径.这可以在windows的计算机管理内添加,也可以在程序中