描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111628248
内容简介
本书基于野火STM32全系列开发板介绍uC/OS-III内核实现与应用开发,全书分为两部分,第壹部分先教你如何从0到1把uC/OS-III内核写出来,从底层的汇编开始讲解任务如何定义、如何切换,还讲解了阻塞延时如何实现、如何支持多优先级、如何实现任务延时列表以及时间片等uC/OS的核心知识点;第二部分讲解uC/OS-III内核组件的应用以及使用uC/OS-III进行多任务编程。
本书内容翔实,案例丰富,配有大量示例代码,适合作为嵌入式领域科技工作者的参考书,也适合相关专业的学生学习参考。
本书内容翔实,案例丰富,配有大量示例代码,适合作为嵌入式领域科技工作者的参考书,也适合相关专业的学生学习参考。
目 录
前言
引言
第一部分 从0到1教你写
C/OS内核
第1章 新建工程—软件仿真2
1.1 新建本地工程文件夹2
1.2 使用KEIL新建工程2
1.2.1 New Project2
1.2.2 Select Device For Target3
1.2.3 Manage Run-Time Environment3
1.3 在KEIL工程中新建文件组4
1.4 在KEIL工程中添加文件4
1.5 调试配置6
1.5.1 设置软件仿真6
1.5.2 修改时钟大小6
1.5.3 添加头文件路径7
第2章 裸机系统与多任务系统8
2.1 裸机系统8
2.1.1 轮询系统8
2.1.2 前后台系统9
2.2 多任务系统10
第3章 任务的定义与任务切换13
3.1 多任务系统中任务的概念14
3.2 创建任务15
3.2.1 定义任务栈15
3.2.2 定义任务函数16
3.2.3 定义任务控制块17
3.2.4 实现任务创建函数18
3.3 操作系统初始化22
3.4 启动系统24
3.5 任务切换27
3.6 main()函数33
3.7 实验现象37
第4章 任务时间片运行39
4.1 SysTick简介39
4.2 初始化SysTick40
4.3 编写SysTick中断服务函数41
4.4 main()函数42
4.5 实验现象44
第5章 空闲任务与阻塞延时45
5.1 实现空闲任务45
5.1.1 定义空闲任务栈45
5.1.2 定义空闲任务的任务控制块46
5.1.3 定义空闲任务函数47
5.1.4 空闲任务初始化47
5.2 实现阻塞延时48
5.3 main()函数50
5.4 实验现象52
第6章 时间戳53
6.1 时间戳简介53
6.2 时间戳的实现53
6.3 时间戳代码54
6.3.1 CPU_Init()函数54
6.3.2 CPU_TS_Init()函数55
6.3.3 CPU_TS_TmrInit()函数56
6.3.4 BSP_CPU_ClkFreq()函数57
6.3.5 CPU_TS_TmrFreqSet()函数58
6.3.6 CPU_TS_TmrRd()函数58
6.3.7 OS_TS_GET()函数59
6.4 main()函数59
6.5 实验现象61
第7章 临界段62
7.1 临界段简介62
7.2 Cortex-M内核快速关中断指令62
7.3 关中断63
7.4 开中断63
7.5 临界段代码的应用64
7.6 测量关中断时间68
7.6.1 测量关中断时间初始化68
7.6.2 测量最大关中断时间69
7.6.3 获取最大关中断时间70
7.7 main()函数71
7.8 实验现象71
第8章 就绪列表72
8.1 优先级表的定义及函数72
8.2 就绪列表的定义及函数80
8.3 main()函数88
8.4 实验现象88
第9章 多优先级89
9.1 定义优先级相关全局变量89
9.2 修改OSInit()函数89
9.3 修改任务控制块90
9.4 修改OSTaskCreate()函数90
9.5 修改OS_IdleTaskInit()函数92
9.6 修改OSStart()函数93
9.7 修改PendSV_Handler()函数93
9.8 修改OSTimeDly()函数94
9.9 修改OSSched()函数95
9.10 修改OSTimeTick()函数97
9.11 main()函数98
9.12 实验现象101
第10章 时基列表103
10.1 实现时基列表103
10.1.1 定义时基列表变量103
10.1.2 修改任务控制块104
10.1.3 实现时基列表相关函数106
10.2 修改OSTimeDly()函数113
10.3 修改OSTimeTick()函数114
10.4 main()函数114
10.5 实验现象114
第11章 时间片115
11.1 实现时间片115
11.1.1 修改任务控制块115
11.1.2 实现时间片调度函数116
11.2 修改OSTimeTick()函数118
11.3 修改OSTaskCreate()函数118
11.4 修改OS_IdleTaskInit()函数120
11.5 main()函数120
11.6 实验现象122
第12章 任务的挂起和恢复124
12.1 实现任务的挂起和恢复124
12.1.1 定义任务的状态124
12.1.2 修改任务控制块125
12.1.3 编写任务挂起和恢复函数126
12.2 main()函数131
12.3 实验现象133
第13章 任务的删除134
13.1 实现任务删除134
13.2 main()函数136
13.3 实验现象136
第二部分 C/OS-III内核
应用开发
第14章 移植C/OS-III到STM32138
14.1 获取STM32的裸机工程模板138
14.2 下载C/OS-III源码138
14.3 C/OS-III源码文件介绍141
14.3.1 EvalBoards141
14.3.2 C-CPU141
14.3.3 C-LIB143
14.3.4 C/OS-III143
14.4 移植到STM32工程145
14.4.1 在工程中添加文件分组145
14.4.2 添加文件到对应分组145
14.4.3 添加头文件路径到工程中146
14.4.4 具体的工程文件修改147
14.4.5 修改源码中的bsp.c与bsp.h文件149
14.5 按需配置最适合的工程151
14.5.1 os_cfg.h151
14.5.2 cpu_cfg.h153
14.5.3 os_cfg_app.h154
14.6 修改app.c155
14.7 下载验证157
第15章 创建任务158
15.1 硬件初始化158
15.2 创建单任务160
15.2.1 定义任务栈160
15.2.2 定义任务控制块160
15.2.3 定义任务主体函数160
15.2.4 创建任务161
15.2.5 启动任务163
15.2.6 app.c163
15.3 下载验证单任务166
15.4 创建多任务166
15.5 下载验证多任务171
第16章 C/OS-III的启动流程172
16.1 “万事俱备,只欠东风”法172
16.2 “小心翼翼,十分谨慎”法173
16.3 两种方法的适用情况175
16.4 系统的启动175
16.4.1 系统初始化175
16.4.2 CPU初始化179
16.4.3 SysTick初始化182
16.4.4 内存初始化183
16.4.5 OSStart()函数183
16.4.6 app.c184
第17章 任务管理187
17.1 任务的基本概念187
17.2 任务调度器的基本概念188
17.3
引言
第一部分 从0到1教你写
C/OS内核
第1章 新建工程—软件仿真2
1.1 新建本地工程文件夹2
1.2 使用KEIL新建工程2
1.2.1 New Project2
1.2.2 Select Device For Target3
1.2.3 Manage Run-Time Environment3
1.3 在KEIL工程中新建文件组4
1.4 在KEIL工程中添加文件4
1.5 调试配置6
1.5.1 设置软件仿真6
1.5.2 修改时钟大小6
1.5.3 添加头文件路径7
第2章 裸机系统与多任务系统8
2.1 裸机系统8
2.1.1 轮询系统8
2.1.2 前后台系统9
2.2 多任务系统10
第3章 任务的定义与任务切换13
3.1 多任务系统中任务的概念14
3.2 创建任务15
3.2.1 定义任务栈15
3.2.2 定义任务函数16
3.2.3 定义任务控制块17
3.2.4 实现任务创建函数18
3.3 操作系统初始化22
3.4 启动系统24
3.5 任务切换27
3.6 main()函数33
3.7 实验现象37
第4章 任务时间片运行39
4.1 SysTick简介39
4.2 初始化SysTick40
4.3 编写SysTick中断服务函数41
4.4 main()函数42
4.5 实验现象44
第5章 空闲任务与阻塞延时45
5.1 实现空闲任务45
5.1.1 定义空闲任务栈45
5.1.2 定义空闲任务的任务控制块46
5.1.3 定义空闲任务函数47
5.1.4 空闲任务初始化47
5.2 实现阻塞延时48
5.3 main()函数50
5.4 实验现象52
第6章 时间戳53
6.1 时间戳简介53
6.2 时间戳的实现53
6.3 时间戳代码54
6.3.1 CPU_Init()函数54
6.3.2 CPU_TS_Init()函数55
6.3.3 CPU_TS_TmrInit()函数56
6.3.4 BSP_CPU_ClkFreq()函数57
6.3.5 CPU_TS_TmrFreqSet()函数58
6.3.6 CPU_TS_TmrRd()函数58
6.3.7 OS_TS_GET()函数59
6.4 main()函数59
6.5 实验现象61
第7章 临界段62
7.1 临界段简介62
7.2 Cortex-M内核快速关中断指令62
7.3 关中断63
7.4 开中断63
7.5 临界段代码的应用64
7.6 测量关中断时间68
7.6.1 测量关中断时间初始化68
7.6.2 测量最大关中断时间69
7.6.3 获取最大关中断时间70
7.7 main()函数71
7.8 实验现象71
第8章 就绪列表72
8.1 优先级表的定义及函数72
8.2 就绪列表的定义及函数80
8.3 main()函数88
8.4 实验现象88
第9章 多优先级89
9.1 定义优先级相关全局变量89
9.2 修改OSInit()函数89
9.3 修改任务控制块90
9.4 修改OSTaskCreate()函数90
9.5 修改OS_IdleTaskInit()函数92
9.6 修改OSStart()函数93
9.7 修改PendSV_Handler()函数93
9.8 修改OSTimeDly()函数94
9.9 修改OSSched()函数95
9.10 修改OSTimeTick()函数97
9.11 main()函数98
9.12 实验现象101
第10章 时基列表103
10.1 实现时基列表103
10.1.1 定义时基列表变量103
10.1.2 修改任务控制块104
10.1.3 实现时基列表相关函数106
10.2 修改OSTimeDly()函数113
10.3 修改OSTimeTick()函数114
10.4 main()函数114
10.5 实验现象114
第11章 时间片115
11.1 实现时间片115
11.1.1 修改任务控制块115
11.1.2 实现时间片调度函数116
11.2 修改OSTimeTick()函数118
11.3 修改OSTaskCreate()函数118
11.4 修改OS_IdleTaskInit()函数120
11.5 main()函数120
11.6 实验现象122
第12章 任务的挂起和恢复124
12.1 实现任务的挂起和恢复124
12.1.1 定义任务的状态124
12.1.2 修改任务控制块125
12.1.3 编写任务挂起和恢复函数126
12.2 main()函数131
12.3 实验现象133
第13章 任务的删除134
13.1 实现任务删除134
13.2 main()函数136
13.3 实验现象136
第二部分 C/OS-III内核
应用开发
第14章 移植C/OS-III到STM32138
14.1 获取STM32的裸机工程模板138
14.2 下载C/OS-III源码138
14.3 C/OS-III源码文件介绍141
14.3.1 EvalBoards141
14.3.2 C-CPU141
14.3.3 C-LIB143
14.3.4 C/OS-III143
14.4 移植到STM32工程145
14.4.1 在工程中添加文件分组145
14.4.2 添加文件到对应分组145
14.4.3 添加头文件路径到工程中146
14.4.4 具体的工程文件修改147
14.4.5 修改源码中的bsp.c与bsp.h文件149
14.5 按需配置最适合的工程151
14.5.1 os_cfg.h151
14.5.2 cpu_cfg.h153
14.5.3 os_cfg_app.h154
14.6 修改app.c155
14.7 下载验证157
第15章 创建任务158
15.1 硬件初始化158
15.2 创建单任务160
15.2.1 定义任务栈160
15.2.2 定义任务控制块160
15.2.3 定义任务主体函数160
15.2.4 创建任务161
15.2.5 启动任务163
15.2.6 app.c163
15.3 下载验证单任务166
15.4 创建多任务166
15.5 下载验证多任务171
第16章 C/OS-III的启动流程172
16.1 “万事俱备,只欠东风”法172
16.2 “小心翼翼,十分谨慎”法173
16.3 两种方法的适用情况175
16.4 系统的启动175
16.4.1 系统初始化175
16.4.2 CPU初始化179
16.4.3 SysTick初始化182
16.4.4 内存初始化183
16.4.5 OSStart()函数183
16.4.6 app.c184
第17章 任务管理187
17.1 任务的基本概念187
17.2 任务调度器的基本概念188
17.3
前 言
如何学习本书
本书从0开始教你如何把C/OS-III写出来,既讲解源码实现,也讲解API如何使用。当你拿到本书开始学习时一定会惊讶,原来RTOS(Real Time Operation System,实时操作系统)的学习并没有那么复杂,原来自己也可以写操作系统,成就感立马爆棚。
全书内容循序渐进,不断迭代,前一章都是后一章的基础,因此最好从头开始阅读,不要跳跃。在学习时务必做到两点:一是不能一味地看书,要把代码和书本结合起来学习,一边看书,一边调试代码。如何调试代码呢?即单步执行每一条程序,看程序的执行流程和执行效果与自己所想的是否一致;二是在每学完一章之后,必须将配套的例程重写一遍(切记不要复制,哪怕是一个分号,但可以照书录入),以做到举一反三,确保真正理解。在自己写的时候肯定会错漏百出,这个时候要认真纠错,好好调试,这是你提高编程能力的最好机会。记住,编写程序不是一气呵成的,而是要一步一步地调试。
本书的编写风格
本书以C/OS-III官方源码为蓝本,抽丝剥茧,不断迭代,教你逐步写出C/OS-III。书中涉及的数据类型、变量名称、函数名称、文件名称、文件存放的位置都完全按照C/OS-III官方的方式来实现。学完本书之后,可以无缝地切换到原版的C/OS-III中使用。要注意的是,在实现的过程中某些函数中会去掉一些形参和冗余的代码,只保留核心的功能,但这并不会影响学习。注意,本书的目的并不是让你自己写一个操作系统,而是让你了解C/OS-III是如何写出来的,着重讲解原理实现,当你学完这本书之后,再学习其他RTOS将会事半功倍。
本书的技术论坛
如果在学习过程中遇到问题,可以到野火电子论坛www.firebbs.cn发帖交流,开源共享,共同进步。
鉴于水平有限,本书难免有错漏之处,热心的读者也可把勘误发送到论坛上以便改进。祝你学习愉快,C/OS-III的世界,野火与你同行。
本书从0开始教你如何把C/OS-III写出来,既讲解源码实现,也讲解API如何使用。当你拿到本书开始学习时一定会惊讶,原来RTOS(Real Time Operation System,实时操作系统)的学习并没有那么复杂,原来自己也可以写操作系统,成就感立马爆棚。
全书内容循序渐进,不断迭代,前一章都是后一章的基础,因此最好从头开始阅读,不要跳跃。在学习时务必做到两点:一是不能一味地看书,要把代码和书本结合起来学习,一边看书,一边调试代码。如何调试代码呢?即单步执行每一条程序,看程序的执行流程和执行效果与自己所想的是否一致;二是在每学完一章之后,必须将配套的例程重写一遍(切记不要复制,哪怕是一个分号,但可以照书录入),以做到举一反三,确保真正理解。在自己写的时候肯定会错漏百出,这个时候要认真纠错,好好调试,这是你提高编程能力的最好机会。记住,编写程序不是一气呵成的,而是要一步一步地调试。
本书的编写风格
本书以C/OS-III官方源码为蓝本,抽丝剥茧,不断迭代,教你逐步写出C/OS-III。书中涉及的数据类型、变量名称、函数名称、文件名称、文件存放的位置都完全按照C/OS-III官方的方式来实现。学完本书之后,可以无缝地切换到原版的C/OS-III中使用。要注意的是,在实现的过程中某些函数中会去掉一些形参和冗余的代码,只保留核心的功能,但这并不会影响学习。注意,本书的目的并不是让你自己写一个操作系统,而是让你了解C/OS-III是如何写出来的,着重讲解原理实现,当你学完这本书之后,再学习其他RTOS将会事半功倍。
本书的技术论坛
如果在学习过程中遇到问题,可以到野火电子论坛www.firebbs.cn发帖交流,开源共享,共同进步。
鉴于水平有限,本书难免有错漏之处,热心的读者也可把勘误发送到论坛上以便改进。祝你学习愉快,C/OS-III的世界,野火与你同行。
评论
还没有评论。