书刊介绍
《μC/OS-III源码分析笔记》内容简介
本书与其他书籍的编排方式不一样:其他书籍是按照官方文件的框架或者组件的方式编排的;本书更强调循序渐进,并结合了笔者在阅读μC/OS-III源码过程中的一些想法。比如一个结构体变量可能会有多个元素,工具书一般会把它们放在一起讲解,而本书为了易于读者更好地理解,只在某些源码涉及这个元素时才会介绍其作用和含义。如果你有时要将本书当作工具书来查询,则可结合这些相关内容涉及的源码进行查找。
李悦城 野火 编著作品目录
前言
第1章:实时操作系统及μC/OS-III简介
1.1、单片机应用程序框架
1.1.1、前后台系统
1.1.2、嵌入式实时操作系统
1.2、如何使用和学习μC/OS-III源码
1.3、μC/OS-III文件结构简介
1.4、μC/OS-III数据结构简介
1.5、任务
1.6、内核对象简介
1.6.1、信号量
1.6.2、事件标志组
1.6.3、消息队列
1.6.4、互斥信号量
1.6.5、内存分区
1.6.6、软件定时器
1.7、μC/OS-III常见的程序段
1.7.1、中断嵌套层数统计
1.7.2、开中断和关中断
1.7.3、使能中断延迟的锁住和开启调度器
1.7.4、没有使能中断延迟的锁住和开启调度器
1.7.5、中断嵌套检测
1.7.6、调度器嵌套检测
1.7.7、时间戳
1.7.8、错误类型
1.7.9、参数检测
1.7.10、内核对象类型检测
1.7.11、安全检测
1.7.12、安全关键IEC61508、1.8、总结
第2章:时钟节拍
2.1、系统节拍中断服务程序
2.2、节拍任务处理时间相关事务
2.2.1、节拍列表更新
2.2.2、节拍列表
2.2.3、哈希算法检测到期任务
2.3、总结
第3章:时间管理
3.1、实例演示
3.2、任务开始延时
3.3、任务插入节拍列表
3.4、任务取消延时
3.5、任务脱离节拍列表
3.6、获取和设置时钟节拍
3.7、μC/OS-III全局变量的定义和声明
3.8、总结
第4章:软件定时器
4.1、实例演示
4.2、插入定时器列表
4.3、删除定时器
4.4、脱离定时器列表
4.5、停止定时器
4.6、定时器内部运行机制
4.6.1、定时器初始化
4.6.2、定时器任务
4.6.3、回调函数
4.7、定时器剩余定时时间获取
4.8、定时器状态获取
4.9、总结
第5章:多值信号量
5.1、实例演示
5.2、信号量的创建
5.3、信号量等待队列
5.4、内核对象添加到调试双向链表
5.5、内核对象从调试双向链表中删除
5.6、部分内核对象数据结构的特点
5.7、发布信号量
5.7.1、开始发布信号量
5.7.2、结构体指针强制类型转换
5.7.3、无确切类型指针
5.7.4、单一任务提交处理
5.7.5、标记某一内核对象被提交
5.7.6、将任务从多个等待列表中移除
5.7.7、将任务从一个等待列表中删除
5.7.8、信号量提交过程涉及的时间戳
5.8、等待信号量
5.9、等待信号量过程的解析
5.9.1、函数解析
5.9.2、阻塞准备等待内核对象的任务
5.9.3、阻塞任务
5.9.4、初始化OS_PEND_DATA类型变量
5.9.5、根据任务优先级将OS_PEND_DATA变量插入双向链表
5.10、强制解除等待状态
5.10.1、强制解除内核对象上的一个任务
5.10.2、标记某一内核对象上的任务被强制解除等待状态
5.11、删除信号量
5.12、设置信号量计数值
5.13、总结
第6章:互斥信号量mutex
6.1、mutex变量的数据结构
6.2、创建mutex
6.3、提交mutex
6.4、等待/获取mutex
6.5、获取mutex过程解析
6.5.1、开始获取mutex
6.5.2、优先级继承过程
6.5.3、改变任务优先级并调整任务在各种列表中的位置
6.6、删除mutex
6.7、强制解除等待mutex
6.8、总结
第7章:消息队列
7.1、实例演示
7.2、消息的数据结构
7.3、消息池
7.4、消息队列解析
7.5、创建消息队列
7.6、提交消息
7.7、提交消息过程解析
7.8、等待消息过程解析
7.9、总结
第8章:事件标志
8.1、实例演示
8.2、事件标志组数据结构解析
8.3、创建事件标志组
8.4、等待事件标志组
8.5、提交事件标志组
8.6、总结
第9章:等待多个内核对象
9.1、实例演示
9.2、等待多个内核对象过程解析
9.2.1、检查多个内核对象是否被提交过
9.2.2、任务等待多个内核对象
9.3、总结
第10章:任务消息队列和任务信号量
10.1、实例演示
10.2、任务消息队列
10.2.1、任务消息队列相关数据结构解析
10.2.2、等待任务消息队列
10.2.3、任务消息队列的提交
10.2.4、强制解除等待任务消息队列
10.2.5、小结
10.3、任务信号量
10.3.1、任务信号量相关数据结构
10.3.2、等待任务信号量
10.3.3、提交任务信号量
10.3.4、强制解除等待任务信号量
10.3.5、小结
第11章:内存管理
11.1、内存碎片是怎么形成的
11.2、实例说明
11.3、内存分区控制块数据结构
11.4、创建内存分区
11.5、获取内存块
11.6、将内存块放回内存分区
11.7、总结
第12章:就绪优先级位映像表
12.1、就绪优先级位映像表数据结构
12.2、初始化就绪优先级位映像表
12.3、查找就绪优先级位映像表中最高的优先级
12.4、置就绪优先级位映像表中某个优先级处于就绪状态
12.5、将就绪优先级位映像表相应位清0、12.6、总结
第13章:就绪列表
13.1、就绪列表数据结构解析
13.2、初始化就绪列表
13.3、使任务就绪
13.4、将任务从就绪列表对应的双向链表的前面转移到后面
13.5、总结
第14章:任务切换
14.1、堆栈的基本概念
14.2、Cortex-M3堆栈
14.3、任务切换
14.4、PendSV服务程序解析
14.5、首次任务调度
14.6、任务堆栈初始化函数OSTaskStkInit解析
14.7、验证初始化堆栈弹栈结果
14.8、中断级任务切换的宏OSIntCtxSw()解析
14.9、任务切换过程中出现中断的处理
14.10、总结
第15章:任务管理
15.1、任务创建
15.2、挂起任务
15.3、恢复挂起任务
15.4、时间片轮转调度
15.4.1、时间片轮转调度初始化
15.4.2、时间片轮转调度核心算法
15.4.3、放弃时间片
15.4.4、设置任务时间片个数
15.5、任务寄存器
15.5.1、设置寄存器的内容
15.5.2、访问任务寄存器
15.6、总结
第16章:中断管理
16.1、中断延迟提交
16.1.1、延迟提交信息记录块
16.1.2、初始化延迟提交
16.1.3、中断延迟提交内核对象
16.1.4、延迟提交任务OS_IntQTask
16.2、中断嵌套管理
16.3、开中断和关中断解析
16.4、进入和退出临界段代码解析
16.4.1、OS_CRITICAL_ENTER解析
16.4.2、OS_CRITICAL_ENTER_CPU_CRITICAL_EXIT解析
16.4.3、OS_CRITICAL_EXIT_NO_SCHED解析
16.4.4、OS_CRITICAL_EXIT解析
16.5、测量关中断时间
16.5.1、测量关中断的初始化
16.5.2、测量最大关中断时间
16.5.3、获取最大关中断的时间
16.6、总结
第17章:各类统计信息
17.1、实例演示
17.2、CPU使用率计算
17.3、CPU使用率测量的初始化
17.4、堆栈检测过程简介
17.5、堆栈检测
17.6、实例解读堆栈溢出
17.7、统计任务OS_StatTask
17.8、总结
第18章:μC/OS-III在不同CPU上的移植
18.1、移植接口主要文件编写
18.1.1、os_cpu_c.c文件
18.1.2、os_cpu_a.asm文件
18.1.3、os_cpu.h文件
18.2、编写CPU相关文件
18.2.1、cpu_c.c文件和cpu_a.asm文件
18.2.2、cpu.h文件
18.2.3、cpu_def.h文件
18.2.4、cpu_core.c文件和cpu_core.h文件
18.2.5、cpu_cfg.h文件
18.3、编写配置文件
18.3.1、os_app_app.h文件
18.3.2、os_cfg.h文件
18.4、总结