FreeRTOS队列结构体-学习笔记

本文是关于FreeRTOS内核V10.0.1中队列结构体的学习笔记,详细解析了队列结构体在不同场景下的用途,包括队列、二进制信号量、计数信号量和互斥量。重点介绍了pcHead、pcTail、pcWriteTo、pcReadFrom等成员在不同情况下的功能和作用。
摘要由CSDN通过智能技术生成

仅为个人理解,个人笔记,有些地方因为还没看源码纯属是自己的猜测,出错的地方以后如果弄明白了会改正
FreeRTOS内核版本为V10.0.1
感谢朱工大大的文章,FreeRTOS高级篇5—FreeRTOS队列分析
int8_t *pcHead
队列结构体的第一项绝对编译成员:
(1)队列结构体用于队列时,该处存放队列存储区域的首地址
(2)队列结构体用于二进制信号量和计数信号量时,该处存放队列结构体的首地址(目的是为了与互斥量区别开来,在内核中会根据这里存放的地址是否为空来判断该队列是否用于互斥量)
(3)队列结构体用于互斥量时,该处存放空地址,在内核中判断该地址为空时,在获取互斥量的时候队列结构体的第二项成员pcTail就会存放获取该互斥量的TCB的首地址,在释放互斥量的时候,在内核中判断该地址为空时,会将队列结构体的第二项成员置空,表示互斥量当前没被任何任务获取
int8_t *pcTail
队列结构体的第二项绝对编译成员:
(1)队列结构体用于队列时,该处存放队列存储区域的末地址
(2)队列结构体用于二进制信号量和计数信号量时,该处存放队列结构体的首地址(目的是为了和互斥量区别开来)
(3)队列结构体用于互斥量时,如果有任务获取到了这个互斥量,那么这里存放该任务的TCB的首地址,如果没有任务获取到这个互斥量,则被置空
int8_t *pcWriteTo
队列结构体的第三项绝对编译成员:
(1)队列结构体用于队列时,仅仅从内核源码使用该项成员来看,假设队列有三个成员空间ABC,该处在队列结构体初始化时存放的是A的首地址,目的是在从队尾入队时找到要入队的地址,在A处首地址开始拷贝队列成员大小的入队数据后,改处存放的地址改为B空间的首地址,当最后一个成员空间C被拷贝入队数据后,该处存放的地址又变回最初的A的首地址

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值