《嵌入式实时作业系统μC/OS原理与实践(第2版)》是2014年4月电子工业出版社出版的图书,作者是卢有亮。
基本介绍
- 书名:嵌入式实时作业系统μC/OS原理与实践(第2版)
- 作者:卢有亮
- ISBN:9787121225178
- 页数:288页
- 定价:49.00元
- 出版社:电子工业出版社
- 出版时间:2014年4月
- 开本:16开
内容简介
嵌入式实时作业系统μC/OS原理与实践(第2版)》内容包括:实时作业系统基础、任务管理、中断和时间管理、事件管理、讯息管理、记忆体管理、移植、工程实践及μC/OS-III分析、移植与套用实践等。本书内容翔实,图文并茂,採用逐步深入、反覆印证的方法,从数据结构的设计入手,再到代码分析、示例验证的剖析方法,逐层深入讲解,给出在虚拟平台下的移植示例和针对各章内容示例,并给出了基于ARM Cortex M3核心的STM32系统上移植和工程实例。
《嵌入式实时作业系统μC/OS原理与实践(第2版)》适用于计算机、电子、通信、自动化及相关专业大学本科、研究生,也适用于广大嵌入式开发工程技术人员、电子技术研究人员、作业系统研究人员。
目录
第1章 实时作业系统基础............................1
1.1 作业系统概述........................1
1.1.1 什幺是作业系统...............................1
1.1.2 作业系统基本功能...........................2
1.2 实时作业系统概述....................3
1.2.1 什幺是实时作业系统.......................3
1.2.2 实时作业系统的基本特徵...............4
1.3 任务................................5
1.3.1 任务简介..........................................5
1.3.2 多任务..............................................6
1.3.3 任务状态..........................................7
1.3.4 任务切换..........................................8
1.3.5 可重入函式和不可重入函式 ..........9
1.4 基于优先权的可剥夺核心.............11
1.4.1 核心 ...............................................11
1.4.2 基于优先权的调度算法.................11
1.4.3 不可剥夺型核心和可剥夺型核心 .12
1.5 同步与通信.........................13
1.5.1 同步 ...............................................13
1.5.2 互斥................................................14
1.5.3 临界区............................................14
1.5.4 事件................................................15
1.5.5 信号量............................................15
1.5.6 互斥信号量....................................17
1.5.7 事件标誌组....................................17
1.5.8 讯息信箱和讯息伫列.....................17
1.6 时钟和中断.........................19
1.7 记忆体管理...........................21
1.8 嵌入式实时作业系统μC/OS学习开发指引 ....21
习题....................................22
第2章 任务管理..........................................23
2.1 任务管理数据结构...................24
2.1.1 任务控制块....................................24
2.1.2 空闲鍊表和就绪鍊表.....................28
2.1.3 任务优先权指针表.........................30
2.1.4 任务堆叠........................................31
2.1.5 任务就绪表和就绪组.....................33
2.2 任务控制块初始化...................38
2.2.1 代码解析........................................38
2.2.2 流程分析........................................40
2.3 作业系统初始化.....................41
2.3.1 代码解析........................................41
2.3.2 流程分析........................................45
2.4 任务的创建.........................45
2.4.1 OSTaskCreate代码解析..................46
2.4.2 OSTaskCreate流程分析..................48
2.4.3 OSTaskCreateExt代码解析............49
2.4.4 OSTaskCreateExt流程分析............52
2.5 任务的删除.........................53
2.5.1 任务删除代码解析.........................54
2.5.2 任务删除流程分析.........................57
2.5.3 请求删除任务代码解析.................58
2.5.4 请求删除任务流程.........................59
2.6 任务挂起和恢复.....................60
2.6.1 OSTaskSuspend代码解析...............61
2.6.2 OSTaskSuspend流程分析...............63
2.6.3 OSTaskResume代码解析...............63
2.6.4 OSTaskResume流程分析...............65
2.7 任务的调度和多任务的启动...........66
2.7.1 任务调度器....................................66
2.7.2 任务切换函式................................68
2.7.3 中断中的任务调度.........................73
2.7.4 多任务的启动 ..............................74
2.8 特殊任务...........................75
2.8.1 空闲任务OS_TaskIdle....................75
2.8.2 统计任务OS_TaskStat....................76
2.9 任务管理总结.......................78
习题....................................79
第3章 中断和时间管理.............................80
3.1 中断管理...........................80
3.1.1 中断管理核心思路.........................80
3.1.2 中断处理的流程.............................82
3.1.3 时钟中断服务................................82
3.2 时间管理...........................83
3.2.1 时间管理主要数据结构.................83
3.2.2 时间的获取和设定.........................84
3.2.3 任务延时函式OSTimeDly.............84
3.2.4 任务按分秒延迟函式
OSTimeDlyHMSM...........................86
3.2.5 延时恢複函数OSTimeDlyResume.....87
习题....................................90
第4章 事件管理..........................................91
4.1 事件管理的重要数据结构.............91
4.1.1 事件控制块(ECB).....................91
4.1.2 事件等待组和事件等待表.............92
4.1.3 事件控制块空闲鍊表.....................93
4.2 事件管理程式.......................94
4.2.1 事件控制块(ECB)初始化.........94
4.2.2 事件等待表初始化.........................94
4.2.3 设定事件等待................................95
4.2.4 取消事件等待................................97
4.2.5 将等待事件的任务就绪.................97
4.3 信号量管理.........................99
4.3.1 信号量的建立OSSemCreate...........99
4.3.2 信号量的删除OSSemDel..............101
4.3.3 请求信号量OSSemPend................104
4.3.4 提交信号量...................................107
4.3.5 无等待请求信号量........................109
4.3.6 放弃等待信号量............................110
4.3.7 信号量值设定...............................111
4.3.8 查询信号量状态............................112
4.3.9 信号量套用举例............................113
4.4 互斥信号量管理....................117
4.4.1 互斥信号量的建立........................118
4.4.2 请求互斥信号量............................120
4.4.3 互斥信号量的删除........................125
4.4.4 发互斥信号量 ..............................128
4.4.5 无等待请求互斥信号量................130
4.4.6 查询互斥信号量状态....................131
4.4.7 改变任务的优先权并重新就绪....133
4.4.8 互斥信号量套用举例....................133
4.5 事件标誌组管理....................137
4.5.1 事件标誌组数据结构....................138
4.5.2 事件标誌组初始化........................140
4.5.3 创建事件标誌组............................141
4.5.4 事件标誌组阻塞函式....................142
4.5.5 请求事件标誌...............................143
4.5.6 删除事件标誌组............................150
4.5.7 提交事件标誌组............................152
4.5.8 标誌节点任务就绪........................154
4.5.9 无等待的请求事件标誌................155
4.5.10 事件标誌管理套用举例..............157
习题...................................161
第5章 讯息管理........................................162
5.1 讯息信箱..........................162
5.1.1 建立讯息信箱...............................163
5.1.2 等待讯息.......................................165
5.1.3 发讯息...........................................168
5.1.4 删除讯息信箱...............................170
5.1.5 放弃等待信箱...............................173
5.1.6 无等待请求讯息............................175
5.1.7 查询讯息信箱状态........................175
5.1.8 讯息信箱的例子............................176
5.2 讯息伫列..........................178
5.2.1 讯息伫列数据结构........................179
5.2.2 初始化讯息伫列............................182
5.2.3 建立讯息伫列...............................183
5.2.4 发讯息到讯息伫列........................185
5.2.5 等待讯息伫列中的讯息................186
5.2.6 删除讯息伫列...............................188
5.2.7 取得讯息伫列的状态....................190
5.2.8 讯息伫列套用举例........................191
习题...................................194
第6章 记忆体管理........................................195
6.1 记忆体管理数据结构..................195
6.1.1 记忆体控制块...................................195
6.1.2 记忆体控制块实体............................196
6.1.3 空闲记忆体控制块鍊表....................196
6.1.4 记忆体分区.......................................196
6.2 记忆体控制块初始化..................197
6.3 创建记忆体分区......................198
6.4 记忆体分区获取......................200
6.5 记忆体分区释放......................201
6.6 查询记忆体分区的状态................202
6.7 记忆体管理实例......................203
习题...................................205
第7章 移植 ..............................................206
7.1 移植说明..........................206
7.1.1 μC/OS-II的代码结构..................206
7.1.2 作业系统中与CPU相关的代码解析....209
7.1.3 μC/OS-II移植步骤......................213
7.2 在Visual C++ 6.0上实现基于
Windows的虚拟μC/OS-II移植.........213
7.2.1 目录结构和工程的建立................213
7.2.2 包含档案includes.h........................214
7.2.3 os_cpu.h中修改的代码..................215
7.2.4 os_cpu.c中修改的代码..................216
7.2.5 主程式代码实现............................219
7.2.6 移植测试.......................................220
7.3 μC/OS-II在ARM Cortex M3下的移植......221
7.3.1 与移植相关的ARM Cortex M3研究....221
7.3.2 os_cpu.h代码解析.........................223
7.3.3 os_cpu_c.c移植代码解析..............225
7.3.4 os_cpu_a.asm移植代码解析..........227
7.3.5 移植后的目录结构........................233
习题...................................234
第8章 工程实践 .....................................235
8.1 工程需求说明......................235
8.2 分析..............................236
8.3 工程设计..........................236
8.3.1 整体设计.......................................236
8.3.2 主机硬体接口设计........................237
8.3.3 多任务设计...................................238
8.3.4 串口数据格式...............................239
8.4 程式设计..........................239
8.4.1 主程式...........................................239
8.4.2 串口中断服务程式........................240
8.4.3 缓冲区处理任务代码....................240
8.4.4 显示任务代码...............................242
8.4.5 AD 採集任务代码........................243
8.4.6 触控萤幕任务代码............................244
8.4.7 μC/GUI讯息处理任务代码..........244
8.4.8 启动任务代码...............................245
8.4.9 工程代码结构...............................245
8.5 运行测试..........................246
习题...................................246
设计题.................................247
第9章 μC/OS-III分析、移植与套用实践.....248
9.1 本章说明..........................248
9.2 μC/OS-III代码结构.................248
9.3 μC/OS-III在STM32上的移植..........250
9.3.1 os_cpu.h代码.................................250
9.3.2 os_cpu_c.c移植代码......................251
9.3.3 os_cpu_a.asm移植代码..................252
9.4 μC/OS-III函式.....................253
9.4.1 任务管理函式...............................253
9.4.2 时间管理函式...............................255
9.4.3 信号量管理函式............................255
9.4.4 互斥信号量管理函式....................257
9.4.5 讯息伫列管理函式........................258
9.4.6 中断管理函式...............................259
9.4.7 核心函式.......................................259
9.5 μC/OS-III工程示例.................260
9.5.1 工程分组.......................................260
9.5.2 主程式...........................................261
9.5.3 串口中断服务程式........................263
9.5.4 缓冲区处理任务代码....................264
9.5.5 显示任务代码...............................266
9.5.6 启动任务代码 ..............................266
9.5.7 其他代码 ......................................267
9.5.8 运行测试.......................................267
习题...................................267
设计题.................................267
附录A 亮点STM32开发板资源...............268
A.1 硬体资源概述......................268
A.2 硬体资源按引脚分配................269
A.3 接口描述..........................271
A.4 软体资源..........................276
A.5 网路资源..........................277
参考文献...................................................278
前言
智慧型系统的盛行使21世纪前10年成为手指尖在触控萤幕上滑动拖曳的时代。不少高级科技人员解决了一个又一个困难,使裸奔的软体在中断和循环的纠缠中走了很远很久。在ARM处理器走出江湖之后,处理器的处理速度和快闪记忆体Flash、静态存储器SRAM的容量都飞速提升,高性能处理器的出现也使高端的複杂处理程式採用嵌入式来实现,如物联网、智慧型手机。存储容量的扩充使嵌入式作业系统有了用武之地。在STM32使用的ARM Cortex处理器中,具有主堆叠MSP和进程堆叠PSP,具有PendSV和Systick中断,这些很明显是配合了μC/OS作业系统。
本书的第1版内容充实,有流程图等辅助手段,笔者在部落格提供了PPT、实验教程和代码,受到了读者的好评,并被一些有所作为的老师引为教材,不少工程师也因此尝到了熟读代码的甜头。因此,第2版的创作有了足够的动力。这本书是笔者独自完成的,第2版的改版经过和很多读者的交流及论坛的谘询交流。第1版的缺陷也显而易见,缺少了硬体平台,只是在VC下仿真学习。因此,笔者设计的亮点STM32开发板弥补了这一个缺陷,也是第2版修改和增加的移植、工程实例及μC/OS-III的基础平台。当然,实验平台是选项,如果喜欢在VC下学习仍然是可以的,而在其他嵌入式系统及开发板下对笔者提供的代码的配置信息进行修改,也可以胜任。
第2版中将提供在STM32(ARM Cortex核心系列晶片)下的移植和例程,增加套用性的工程示例。2013年μC/OS-III逐步进入市场,第2版也包含了这方面的内容。为方便读者阅读代码,本书目前配套的亮点嵌入式开发板的资源也在附录中列出,不选择开发板的同样可以下载代码。另外以技术论坛作为交流平台或翻转课堂,论坛地址在序言最后给出。
内容划分
第1章是作业系统和嵌入式实时作业系统的基本原理。第2章是作业系统最核心的任务管理,需要对数据结构和原始码仔细体会。第3章是中断和事件管理。第4章、第5章是事件和讯息部分,包含了各种事件和讯息机制。第6章是记忆体管理。第7章是移植的流程分析和在虚拟平台及STM32下的移植。第8章是全新的工程实践部分,给出一个在STM32下的完整的工程示例。第9章是与时俱进的μC/OS-III,并将工程实践的代码在μC/OS-III上实现了一遍。
本书特色
採用逐步深入,反覆印证的方法。 ●
採用从数据结构的设计入手,再到代码分析、示例验证的剖析方法。给出在虚拟平台 ●下的移植示例和针对各章内容的示例。
给出在实际嵌入式系统下的工程示例。 ●
表格、图形化的风格。 ●
适用面广,适合于广大IT类学生及工作者。 ●
对于没有学习过作业系统原理的读者无障碍。 ●
与时俱进地扩展到μC/OS-III。 ●
学习本课程的先导知识是C语言、软体技术基础或数据结构,可以同步学习微机原理 ●或嵌入式系统设计。另外,本人的另一本着作《基于STM32的嵌入式系统原理与设计》可以与本书交相辉映。
作为本科生等教材的建议是:第1、2、3章详细讲解,第4、5、6章的内容每章选择2~3节讲解。第7、8章的内容可作为实践部分。另外如果要上实验,则可以选择在Windows下的虚拟实验,在论坛和部落格提供有实验的PPT和代码。另外,也可以选择使用亮点STM32开发板作为实验教学平台。本书在每章后提供了习题,笔者也编写了PPT,适合32~48学时对高年级本科生或低年级研究生讲授。同时欢迎广大技术人员引为学习资料,欢迎进论坛和访问笔者的部落格进行交流。
目前可以提供的资源主要有:
教学课件。 ●
15个学时的实验教程代码和PPT。 ●
亮点STM32开发板及配套μC/OS实例代码。 ●
感谢读者对本书的认可,欢迎读者到论坛和部落格获取资料、交流及提出宝贵意见。
笔者
2014年于成都