当前位置:网站首页>1324_FreeRTOS队列创建函数实现分析
1324_FreeRTOS队列创建函数实现分析
2022-08-07 09:16:00 【grey_csdn】
全部学习汇总: GitHub - GreyZhang/g_FreeRTOS: learning notes about FreeRTOS.

这个是之前常用的一个队列对象创建的接口,其实xQueueCreate是一个定义出来的宏。

这个是宏定义的部分,为了方便查看我做了一个换行信息。这里,其实是一个通用的队列创建接口,固定了其中的一个参数数值。另外需要注意的一点是,这个功能是必须开启动态的分配功能的时候才支持的功能。

关于固定的参数,这里是定义的地方。从这里基本上可以推测,队列有6中基本的用法,而其中的2种其实是一回事儿。

创建队列的时候,采用动态的方式会先进行存储分配。存储的信息主要是两部分,一部分是队列的对象,另一部分是队列容纳的数据信息。

这个是队列的信息的定义,看起来还是很复杂的。接下来,我先测试一下这个数据类型的空间占用情况。

一个队列的信息占用了72个字节,看起来资源的消耗还是很大的。

分配成功之后,初始化新的队列。感觉上其实是根据数据存储的地方进行数据区域的初始化。这里也到了函数的最后部分了,可以看得出来,如果创建成功函数返回的句柄其实是指向存储空间的指针,否则返回的是NULL。这样,其实就很容易理解为什么在很多例子中看到测试代码需要判断这个是否是非NULL的数值再进行下一步的操作了。而收发队列都是借用的这个返回信息,其实是给了相关的动作操作队列空间的方式。

如果队列的类型是基础类型或者是队列集合,那么pcHead指向队列的开始。如果是其他几种用途,看上去是只利用队列的数据区。

之后设置队列的长度以及元素个数等属性,设置完了之后对队列进行复位的操作。接下来,看看这个队列的复位操作如何处理的。

这个是reset的操作,队列尾其实是最后的字节位置,写入指定在队列头,读取是在队列尾部的前一个元素的位置。读取的这个指针操作,多少是有一些没看懂为什么这么处理。后面,这个操作还是得理解一下。可能,这个得结合读取的动作来看了。

接下来的这部分,按照前面的调用,应该执行画出来的这部分。也就是对发送事件链表以及等待事件链表进行初始化。这样,其实大概的机理也很容易弄明白了。其实,队列跟任务的绑定关系是在发送或者接收的接口调度的时候建立的。
这样,队列的创建函数基本就分析完了。跟我之前猜测的还是不是很相同,我以为是直接借助于简单的任务调度创建一下逻辑操作就可以,看起来这里还是把实现转向了状态链表的方式上去了。也可以理解,这样的方式会跟任务有着更好的粘合度。
边栏推荐
猜你喜欢

redis的原理和源码-事务机制

30.01 C/S、TCP/IP协议妙趣横生、惟妙惟肖谈

the largest area of the island

一文读懂微服务架构的分解设计

【正点原子STM32连载】第七章 认识HAL库 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

The principle and source code of redis-sentinel sentinel principle and source code analysis (on)

E-commerce data warehouse notes 1 (data warehouse concept, project requirements and architecture design, data generation module)

Unity 3D 游戏通用系统设置页面,自定义按键设置,背景虚化,图像设置,亮度对比度饱和度音量调节,分辨率窗口化,帧率垂直同步,抗锯齿,阴影质量,纹理质量设置

VisualVM工具的下载及插件安装

解决typora的文件内容复制到csdn上图片显示不出来的问题
随机推荐
The principle and source code of redis - basic introduction
数据库之存储
3D~RPG游戏的制作
今日睡眠质量记录74分
多路复用技术
Database connection pool commons-pool source code analysis
The principle and source code of redis - introduction of client structure and source code analysis
window.requestAnimationFrame Web3D rendering frame rate control
VPC5021电流模式 PWM 控制器 3uA 超低启动电流
【正点原子STM32连载】第五章 STM32基础知识入门 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
#yyds Dry Goods Inventory# [Yugong Series] August 2022 Go Teaching Course 004-Go Code Comments
E-commerce data warehouse notes 1 (data warehouse concept, project requirements and architecture design, data generation module)
一种API写法
What is an SRM system?What is the role? How does the enterprise apply the SRM system?
限制ip 1分钟只可以访问3次数据库
The principle and source code of redis-sentinel sentinel principle and source code analysis (on)
选择排序(简单选择排序和堆排序)
交换排序(冒泡排序、快速排序)
rest client: a lightweight vscode plugin for api requests
数据库-备份