极术读书是极术社区推出的读书栏目。极术读书专栏定期推荐嵌入式,人工智能,物联网,云计算,安全,半导体等智能计算领域的图书及技术管理类图书,同时策划社区赠书活动和作者webinar方便读者交流互动,欢迎关注极术读书。
嵌入式实时操作系统是嵌入式人工智能与物联网终端的重要工具和运行载体,也是嵌入式工程师必备知识。本篇极术读书将推荐安谋科技合作图书,苏州大学王宜怀教授所著《嵌入式实时操作系统 ――基于ARM Mbed OS的应用实践》。
内容介绍
虽然实时操作系统种类繁多,有国外的,也有国产的;有收费的,也有免费的;有开发者持续维护升级的,也有依赖爱好者更新升级的。但是无论哪一种, 学习实时操作系统时都必须以一个具体的实时操作系统为蓝本。实际上,不同的实时操作系统,其应用方法及原理大同小异,掌握其共性是学习的关键,这样才能达到举一反三的效果。
本书推荐的Mbed OS是ARM公司于2014年开始推出并逐步完善的一款免费的 开源嵌入式实时操作系统,Mbed OS专为基于ARM Cortex-M内核的MCU设计, 主要面向物联网终端。该书以ARM Mbed OS实时操作系统为背景,阐述实时操作系统的线程、调度、延时函数、事件、消息队列、线程信号、信号量、互斥量等基本要素,给出实时操作系统下的程序设计方法。
本书分为基础应用篇(第1~7章)、原理剖析篇(第8~12章)及综合实践篇(第13、14章)三大部分,如果读者只做实时操作系统下的应用开发,可只阅读基础应用篇与综合实践篇;如果希望理解实时操作系统原理,那么建议通读全书。
本书适合软件开发工程师,可作为实时操作系统的技术培训书籍,书籍配套有实践的开发板。
书籍目录
第1篇 基础应用篇
第1章 实时操作系统的基本概念与线程基础知识 3
1.1 实时操作系统的基本含义 3
- 1.1.1 嵌入式系统的基本分类 3
- 1.1.2 无操作系统与实时操作系统 4
- 1.1.3 实时操作系统与非实时操作系统 5
1.2 实时操作系统中的基本概念 6
- 1.2.1 线程与调度的基本含义 6
- 1.2.2 内核的基本概念 7
- 1.2.3 线程的基本概念 9
1.3 线程的三要素、四种状态及三种基本形式 10
- 1.3.1 线程的三要素 10
- 1.3.2 线程的四种状态 11
- 1.3.3 线程的三种基本形式 13
- 1.4 本章小结 14
第2章 相关基础知识 17
2.1 CPU内部寄存器的分类及ARM Cortex-M处理器的主要寄存器 17
- 2.1.1 CPU内部寄存器的分类 17
- 2.1.2 ARM Cortex-M处理器的主要寄存器 18
2.2 C语言中的构造类型及编译相关问题 21
- 2.2.1 C语言中的构造类型 21
- 2.2.2 编译相关问题 25
2.3 实时操作系统内核使用的数据结构 26
- 2.3.1 栈与堆 26
- 2.3.2 队列 28
- 2.3.3 链表 29
2.4 汇编语言概述 36
- 2.4.1 汇编语言格式 36
- 2.4.2 常用伪指令简介 38
- 2.5 本章小结 40
第3章 Mbed OS第一个样例工程 41
- 3.1 Mbed OS简介 41
3.2 软件和硬件开发平台 42
- 3.2.1 GEC架构简介 42
- 3.2.2 硬件平台 43
- 3.2.3 软件平台 44
- 3.2.4 网上电子资源 45
3.3 第一个样例工程 46
- 3.3.1 样例程序功能 46
- 3.3.2 工程框架设计原则 46
- 3.3.3 无操作系统的工程框架 47
- 3.3.4 Mbed OS的工程框架 51
- 3.4 本章小结 56
第4章 实时操作系统下应用程序的基本要素 57
4.1 中断的基本概念及处理过程 57
- 4.1.1 中断的基本概念 57
- 4.1.2 中断处理的基本过程 58
4.2 时间嘀嗒与延时函数 60
- 4.2.1 时间嘀嗒 60
- 4.2.2 延时函数 60
4.3 调度策略 61
- 4.3.1 调度基础知识 61
- 4.3.2 Mbed OS中使用的调度策略 62
- 4.3.3 Mbed OS中的固有线程 63
4.4 实时操作系统中的功能列表 64
- 4.4.1 就绪列表 64
- 4.4.2 延时列表 64
- 4.4.3 等待列表 64
- 4.4.4 条件阻塞列表 64
- 4.5 本章小结 65
第5章 同步与通信的应用方法 67
5.1 实时操作系统中同步与通信的基本概念 67
- 5.1.1 同步的含义与通信手段 67
- 5.1.2 同步类型 68
5.2 事件 69
- 5.2.1 事件的含义及应用场合 69
- 5.2.2 事件的常用函数 69
- 5.2.3 事件的编程举例:通过事件实现中断与线程的通信 71
- 5.2.4 事件的编程举例:通过事件实现线程之间的通信 74
5.3 消息队列 76
- 5.3.1 消息队列的含义及应用场合 76
- 5.3.2 消息队列的常用函数 76
- 5.3.3 消息队列的编程举例 78
5.4 线程信号 82
- 5.4.1 线程信号的含义及应用场合 82
- 5.4.2 线程信号的常用函数 83
- 5.4.3 线程信号的编程举例 84
5.5 信号量 87
- 5.5.1 信号量的含义及应用场合 87
- 5.5.2 信号量的常用函数 88
- 5.5.3 信号量的编程举例 89
5.6 互斥量 92
- 5.6.1 互斥量的含义及应用场合 92
- 5.6.2 互斥量的常用函数 94
- 5.6.3 互斥量的编程举例 95
- 5.7 本章小结 98
第6章 底层硬件驱动构件 99
6.1 嵌入式构件概述 99
- 6.1.1 制作构件的必要性 99
- 6.1.2 构件的基本概念 99
- 6.1.3 嵌入式开发中构件的分类 100
- 6.1.4 构件的基本特征与表达形式 101
6.2 底层硬件驱动构件设计原则与方法 102
- 6.2.1 底层硬件驱动构件设计的基本原则 102
- 6.2.2 底层硬件驱动构件设计要点分析 103
- 6.2.3 底层硬件驱动构件封装规范概要 104
- 6.2.4 封装的前期准备 105
6.3 底层硬件驱动构件设计举例 106
- 6.3.1 GPIO构件 106
- 6.3.2 UART构件 114
- 6.3.3 Flash构件 119
- 6.3.4 ADC构件 123
- 6.3.5 PWM构件 127
6.4 应用构件及软件构件设计实例 131
- 6.4.1 应用构件设计实例 131
- 6.4.2 软件构件设计实例 133
- 6.5 本章小结 142
第7章 实时操作系统下的程序设计方法 143
7.1 程序稳定性问题 143
- 7.1.1 稳定性的基本要求 143
- 7.1.2 看门狗复位与定期复位的应用 144
- 7.1.3 临界区的处理 147
7.2 中断服务程序设计、线程划分及优先级安排问题 148
- 7.2.1 中断服务程序设计的基本问题 148
- 7.2.2 线程划分的简明方法 149
- 7.2.3 线程优先级安排问题 149
7.3 利用信号量解决并发与资源共享的问题 150
- 7.3.1 并发与资源共享的问题 150
- 7.3.2 应用实例 151
7.4 优先级反转问题 155
- 7.4.1 优先级反转问题的出现 155
- 7.4.2 Mbed OS中避免优先级反转问题的方法 157
- 7.5 本章小结 162
第2篇 原理剖析篇
第8章 理解Mbed OS的启动过程 165
8.1 芯片启动到main函数之前的运行过程 165
- 8.1.1 寻找第一条被执行指令的存放处 165
- 8.1.2 通过启动文件理解芯片启动过程 167
8.2 Mbed OS启动流程概要 169
- 8.2.1 相关宏定义及结构体 169
- 8.2.2 栈和堆的配置 176
- 8.2.3 启动过程概述 179
- 8.2.4 如何运行到主线程 181
- 8.2.5 启动过程总流程源代码 182
8.3 深入理解启动过程(一):内核初始化解析 183
- 8.3.1 内核初始化准备工作 183
- 8.3.2 进入SVC中断服务程序SVC_Handler 186
- 8.3.3 实际内核初始化函数 187
- 8.3.4 返回流程 199
8.4 深入理解启动过程(二):创建主线程、启动内核 200
- 8.4.1 创建主线程 201
- 8.4.2 启动内核 215
- 8.4.3 定时器线程函数 226
- 8.4.4 消息获取与处理函数 228
- 8.4.5 线程延时等待函数 238
8.5 中断服务程序SVC_Handler详解 240
- 8.5.1 SVC_Handler功能概要 241
- 8.5.2 SVC_Handler完整流程 241
- 8.5.3 SVC_Handler功能分段解析 243
- 8.5.4 SVC_Handler完整代码注释 246
- 8.6 函数调用关系总结及存储空间分析 249
- 8.6.1 启动过程中函数的调用关系总结 250
- 8.6.2 启动过程存储空间分析 253
- 8.7 本章小结 257
第9章 理解时间嘀嗒 259
9.1 时间嘀嗒的建立与使用 259
- 9.1.1 SysTick定时器的寄存器 259
- 9.1.2 SysTick定时器的初始化 260
- 9.1.3 SysTick中断服务程序 263
9.2 延时函数 266
- 9.2.1 线程延时等待函数 266
- 9.2.2 线程延时嘀嗒函数 267
- 9.2.3 其他时间嘀嗒函数 269
9.3 延时等待列表工作机制 271
- 9.3.1 线程插入延时等待列表函数 271
- 9.3.2 从延时等待列表中移除线程的函数 274
- 9.3.3 延时函数调度过程实例剖析 275
9.4 与时间相关的函数 279
- 9.4.1 获取系统运行时间函数 280
- 9.4.2 日期转时间戳函数 281
- 9.4.3 时间戳转日期函数 283
- 9.5 本章小结 286
第10章 理解调度机制 287
10.1 ARM Cortex-M4的SVC和PendSV中断的调度作用 287
- 10.1.1 SVC中断的调度作用 287
- 10.1.2 PendSV中断的调度作用 288
- 10.1.3 列表分析 288
10.2 中断服务程序PendSV_Handler剖析 289
- 10.2.1 osRtxPendSV _Handler的功能概要 289
- 10.2.2 osRtxPendSV_Handler函数源代码解析 290
- 10.2.3 跳转到SVC_Context进行上下文切换 291
- 10.2.4 PendSV_Handler函数完整代码注释 291
10.3 PendSV应用举例 292
- 10.3.1 PendSV在事件中的应用 292
- 10.3.2 PendSV在线程信号中的应用 296
- 10.4 本章小结 300
第11章 理解事件与消息队列 301
11.1 事件 301
- 11.1.1 事件的相关结构体 301
- 11.1.2 事件函数深入剖析 302
- 11.1.3 事件调度剖析 307
11.2 消息队列 311
- 11.2.1 消息或消息队列结构体 311
- 11.2.2 消息队列函数深入剖析 313
- 11.2.3 消息队列调度剖析 318
- 11.3 本章小结 322
第12章 理解线程信号、信号量与互斥量 323
12.1 线程信号 323
- 12.1.1 线程操作函数 323
- 12.1.2 线程信号函数深入剖析 329
- 12.1.3 线程信号调度剖析 333
12.2 信号量 337
- 12.2.1 信号量控制块结构体 337
- 12.2.2 信号量函数深入剖析 337
- 12.2.3 信号量调度剖析 341
12.3 互斥量 345
- 12.3.1 互斥量结构体 345
- 12.3.2 互斥量函数深入剖析 346
- 12.3.3 互斥量调度剖析 352
- 12.3.4 互斥量避免优先级反转问题调度剖析 356
- 12.4 本章小结 359
第3篇 综合实践篇
第13章 基于Mbed OS的AHL-EORS应用 363
13.1 AHL-EORS简介 363
- 13.1.1 硬件清单 363
- 13.1.2 硬件测试导引 364
13.2 卷积神经网络概述 364
- 13.2.1 卷积神经网络的技术特点 364
- 13.2.2 卷积神经网络原理 365
13.3 AHL-EORS选用模型分析 368
- 13.3.1 MobileNetV2模型 369
- 13.3.2 NCP模型 370
13.4 AHL-EORS的数据采集与训练过程 373
- 13.4.1 数据采集程序 373
- 13.4.2 模型训练与部署 376
- 13.5 在通用嵌入式计算机GEC上进行的推理过程 377
- 13.6 本章小结 380
第14章 基于Mbed OS的NB-IoT应用开发 381
14.1 窄带物联网应用开发概述 381
- 14.1.1 窄带物联网简介 381
- 14.1.2 NB-IoT应用开发所面临的难题及解决思路 382
- 14.1.3 直观体验NB-IoT数据传输 383
- 14.1.4 金葫芦NB-IoT开发套件简介 384
14.2 NB-IoT应用架构及通信基本过程 386
- 14.2.1 建立NB-IoT应用架构的基本原则 386
- 14.2.2 终端UE、信息邮局MPO与人机交互系统HCI的基本定义 386
- 14.2.3 基于信息邮局粗略了解基本通信过程 387
14.3 终端UE与云侦听程序的通信过程 388
- 14.3.1 基于mbed的终端UE模板工程设计 389
- 14.3.2 云侦听模板工程功能简介 391
- 14.3.3 建立云侦听程序的运行场景 392
- 14.3.4 运行云侦听与终端UE模板工程 394
- 14.3.5 通信过程中的常见错误说明 396
14.4 通过Web网页的数据访问 397
- 14.4.1 运行Web模板观察自己终端UE的数据 397
- 14.4.2 NB-IoT的Web网页模板工程结构 398
14.5 通过微信小程序的数据访问 399
- 14.5.1 运行小程序模板观察自己终端UE的数据 399
- 14.5.2 NB-IoT的微信小程序模板工程结构 401
- 参考文献 403
作者简介
王宜怀,博士,教授、博士生导师、网络工程系主任;苏州大学嵌入式系统与物联网研究所所长;苏州市政协常委、中国农工民主党苏州市委常委;江苏省计算机学会嵌入式系统与物联网专业委员会主任、中国软件行业协会嵌入式系统分会理事。主要研究方向:嵌入式系统、物联网与智能控制技术。
书籍购买
书籍购买:https://item.jd.com/13237887.html
试读链接:https://cread.jd.com/read/startRead.action?bookId=30817514&readType=1
配套电子资源获取(包含文档和源代码):点击苏州大学嵌入式学习社区官网,在【著作】-【mebdOS】下栏目下获得电子资源。
更多书籍推荐请关注极术读书专栏,用知识武装头脑,增强个人竞争力。