没有合适的资源?快使用搜索试试~ 我知道了~
首页FreeRTOS内核解析v0.1-LOVT
FreeRTOS内核解析v0.1-LOVT
需积分: 50 9 下载量 154 浏览量
更新于2023-03-16
评论
收藏 762KB DOC 举报
FreeRTOS内核解析 queue.c list.c task.c heap_4.c详细介绍
资源详情
资源评论
资源推荐
内核解析
是一个小型的嵌入式实时系统内核,应用比较广泛,而且开源,商业免费。
在 系列上移植
图 ! 操作流程
在 内核中包含的文件:
!"#"
协线程文件,和任务类似,在系统资源比较缺乏下使用。
""
列表结构描述,在内核整体控制上都使用了列表格式数据处理。一切
的数据结构基础。
"$"
队列,任务和任务之间的通讯处理。
""
软定时,以任务形式存在。
%"#"
硬件与系统内核交互部分。& 、'() 、中断等设置。汇编与 的结合
*"+"
堆栈内存空间。内存空间申请,释放。在这里我们使用 ,"。
-""
所有任务相关函数。
.",#"
系统相关接口 , 标准化,接口处理。
heap_4.c
实现原理:申请一块静态内存,按照堆的方式处理。包含内存申请,释放,自动合并相
连的空闲内存。
应用 函数:
TPCON.CN --LOVT 15.09.01
/#0/##12,3425;
/#/#1/#0/5;
2,3#6+21/#57
内部过程函数:
/#/+1/#57
/#/##813#803##57
99申请内存空间块描述 可以看做一个节点
:,8 ,8(
;
,8 ,8(03(3#799指向下一块内存
2,3#2799空闲块大小
<3#87
99指向开始和结尾 3 是静态内存 3'是个指针
3#83=03'>(?88
节点 数据空间 。。。 节点 数据空间 。。。
在系统蛇口中要考虑到字节对齐的问题。所以在申请一块内存时,要先进行内存字节格式
对齐。也就是说 !@- 个字节格式化后也为 . 个字节。
AB#C',86('(.99. 字节对齐
AB#C',86('(,1D3DDD-599对齐掩码
#E#? ,F'>112#:13#85G
1#C',86('(@!55HI#C',86('(,57
99静态内存 作为整个内存空间 #BE8,+',F'宏定义设置 根据需求设置大小
E+J#BE8,+',F'K7
AB)L?'),+',F' 1#BE8,+',F'@
#C',86('(5 99实际可用大小
在初始化 prvHeapInit()函数中 假设 #BE8,+',F' 为 !D1D3DD5
在实际使用空间中 起码可以保持 !D@. 个字节空间可用
TPCON.CN --LOVT 15.09.01
E+指向了 . 字节对齐化了的地址
3"3(3#>1/#05E+7
3"3#2>12,5D7
假设 + 是一个不对齐的地址 D3DD-%.;那么 . 字节对齐后为 D3DD-*D
D3DD-%.D3DD.D%.
。。。 。。。
D3DD-*DE+指向该位置
3 可以看做独立该空间的一个节点 大小为 D指向空间的开始地址
3@M3(3#指向 E+
+'>E+G3#+27
+'@>? ,F'7
3'>1/#05+'7 更新 3'指向
3'@M3#2>D7
3'@M3(3#>(?887
D3DD.D%D13'5
。。。 。。。
(?8813(3#5
3#>1/#05E+7
3#@M3#2>3#+2@? ,F'7
3#@M3(3#>3'7
3E@>? ,F'7 99更新空闲大小
使用标志 高位置 !
3##>112,5!5NN112#:12,50,',C'5@!57
3#3#@M3(3#
对齐损失 节点 数据空间 3'
TPCON.CN --LOVT 15.09.01
申请内存 pvPortMalloc(size_t xWantedSize) 342 为要申请内存的大小,
返回该内存的指针
:13'>>(?885 99未初始化 先进行初始化
;
/+157
<
342G>? ,F'7 99实际使用的空间为节点G内存
342 设置的大小也要字节对齐化处理
3/##>H37
3#>3"3(3#7
O113#@M3#2N3425HH13#@M3(3#P
>(?8855
; 99遍历全局 查看足够大的空闲内存
3/##>3#7
3#>3#@M3(3#7
<
3/##指向 3
3#注意:这里的 数据都是空闲内存
空闲 空闲 空闲 。。 '()
3/##3#
空闲 空闲 空闲 。。 '()
3/##3#
(该空间足够大)
空闲 空闲 空闲 。。 '()
/
/返回空间地址
3/##@M3(3#>3#@M3(3#7
3/##3#这里 3# 不为空 断开空闲链表
空闲 空闲 数据 。。 '()
空间大 一分为二
3(O#8>1/#05111E053#5G34257
3(O#8@M3#2>3#@M3#2@3427
3#@M3#2>3427这里可以看出节点中的大小包含节点所占空
间
TPCON.CN --LOVT 15.09.01
3#3(O#8
空闲 要用内存 空闲 。。 '()
/##8113(O#8557把新块插入空闲列表
3E@>3#@M3#27更新剩余空间
3#@M3#2Q>3##7节点长度高位置 !
3#@M3(3#>(?887 已使用从空闲链表中断开
把 该 块 插 入 空 闲 链 表 prvInsertBlockIntoFreeList(xBlockLink
*pxBlockToInsert)
:#13# > H37 3#@M3(3# N 3##7
3#>3#@M3(3#5
; 遍历空闲列表 定位 3#
<
3#指向 3
3"3(3#指向第一个空闲 3##
空闲 要用内存 。。 '()
>1E053#7为要插入块的前一个空闲块
:11G3#@M3#25>>1E053##5
; 如果 3# 这块在插入块 3## 前方相邻 那么进行合并
3#@M3#2G>3##@M3#27
3##>3#7
<如果 3#与 3## 相邻 那么合并这 块空闲
3#3##
空闲 空闲 。。 '()
3#13##5合并后
空闲 。。 '()
>1E053##7
:11G3##@M3#25>>1E053#@
M3(3#5
; 如果 3# 这块在插入块 3## 后方相邻 那么进行合并
3##@M3#2G>3#@M3(3#@M3#27
3##@M3(3#>3#@M3(3#@
TPCON.CN --LOVT 15.09.01
剩余38页未读,继续阅读
lovt
- 粉丝: 2
- 资源: 119
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0