FreeRTOS学习笔记之-------FreeRTOS队列基础知识 2020.3.30

知识点:

1.(为什么要使用队列?
在没有操作系统的时候,两个应用程序进行消息传递一般是使用全局变量的方式,但是如果在使用操作系统的应用中用全局变量来传递消息,则会涉及资源管理的问题。

2.队列是为了任务与任务、任务与中断之间的通信而准备的,可以在任务与任务、任务与中断之间传递消息,队列中可以存储有限的、大小固定的数据项目

3.队列能保存的最大数据项目数量叫队列的长度。

4.通常,队列采用的是先进先出的(FIFO)的存储缓冲机制,也就是往队列中发送数据的时候(也叫入队)永远都是发送到队列的尾部,而从队列中提取数据的时候(也叫出队)是从队列的头部提取的。

5.发送数据和读取数据有两种方式,一个是值传递,一个是引用传递。值传递是数据发送到队列中会导致数据复制,也就是将要发送的数据复制到队列中。那么引用传递就是传递的是消息指针(好处是节省时间,因为不用进行数据复制)。

6.入队和出队阻塞方式都有三种:

  1. 二话不说,扭头就走(完全不等数据存储区里面是否有有效数据)。
  2. 等一会看看,说不定一会儿就有数据了(等待的时间就取决于我们认为设置的阻塞时间是多长)。
  3. 死等,直到有数据(当阻塞时间设置为portMAX_DELAY时,任务就会一直进入阻塞态等待,直到接收到数据为止)

7.有一个结构体用于描述队列,叫做Queue_t。

8.如果使用的是静态方法创建队列的话,那么队列需要的内存由用户自行分配。
如果使用的是动态方法创建队列的话,那么创建队列需要的内存均通过FreeRTOS中的动态内存管理函数pvPortMalloc()分配。

发布了34 篇原创文章 · 获赞 65 · 访问量 7310

猜你喜欢

转载自blog.csdn.net/qq_40544107/article/details/105203046
今日推荐