第2-3章 物联网操作系统的关键技术

这章内容比较多,本质上是在回答一个核心问题:物联网操作系统为什么不同于普通嵌入式操作系统,它需要哪些关键技术来支撑物联网设备运行?


一、本章总体框架

主要讲了以下内容:

  1. 物联网操作系统概述 包括发展历史、定义、发展路径、发展要求和特征。
  2. 物联网操作系统体系结构 包括内核、外围功能组件、协同框架、智能引擎、集成开发环境、安全框架等。
  3. 物联网操作系统内核关键技术 包括线程管理、线程同步、线程通信、内存管理、时钟管理、中断管理。
  4. 外围功能组件 包括文件系统、电源管理、网络协议栈、远程升级、GUI、XML 解析等。
  5. 嵌入式开发相关基础 包括交叉开发环境、交叉编译、GCC 编译过程、AT 指令等。

考试重点一般在:

物联网操作系统的特点、体系结构、内核功能、线程通信、内存管理、中断机制、交叉编译、AT 指令。


二、物联网操作系统是什么?

1. 定义

物联网操作系统可以理解为:

运行在物联网设备上的操作系统,它向上承接应用,向下衔接硬件平台,并提供网络协议栈、设备管理、安全管理、功耗管理等功能。

也就是说,物联网操作系统不是单纯的“任务调度器”,它还要支持:

  • 设备联网;
  • 低功耗运行;
  • 远程升级;
  • 安全通信;
  • 多设备协同;
  • 软硬件裁剪;
  • 适配不同硬件平台。

上一章讲过,普通嵌入式系统重点是控制设备,而物联网操作系统还要进一步支持“联网”和“协同”。

所以可以这样理解:

嵌入式操作系统解决“设备怎么运行”; 物联网操作系统进一步解决“设备怎么联网、怎么协同、怎么安全运行”。


三、物联网操作系统的发展历史

典型物联网操作系统,例如:

  • TinyOS
  • Contiki
  • RIOT
  • ARM Mbed OS
  • MiCO OS
  • LiteOS
  • Android Things
  • Zephyr
  • AliOS Things
  • Amazon FreeRTOS
  • Azure Sphere OS
  • Azure IoT Edge
  • ThreadX

这些系统说明一个问题:

物联网操作系统发展非常活跃,但目前还没有一个绝对统一、占压倒优势的系统。

总结:

精彩纷呈,群雄逐鹿,并没有统一的具有压倒优势的系统出现。

这句话可以作为简答题中的背景描述。


四、物联网操作系统的三条发展路径

三条技术路径。

1. 基于 Android、iOS 等系统裁剪定制

这种方式是把原来面向手机、平板等智能终端的操作系统进行裁剪,使它适应物联网设备。

代表:

  • Android Things
  • Windows 10 IoT Core

适合对象:

  • 计算能力较强;
  • 存储空间较大;
  • 功能复杂;
  • 类似智能终端的物联网设备。

缺点是系统体积较大,不适合极低功耗、资源很小的传感器节点。


2. 基于传统嵌入式操作系统或 RTOS 扩展联网功能

这种方式是在传统嵌入式实时操作系统基础上,增加网络协议栈、设备联网、远程管理等功能。

代表:

  • RT-Thread
  • FreeRTOS
  • LiteOS
  • μC/OS-II

适合对象:

  • MCU 设备;
  • 低功耗终端;
  • 传感器节点;
  • 工业控制设备。

这是物联网课程中最重要的一类,因为它和单片机、嵌入式开发关系最密切。


3. 面向物联网产生的新型操作系统

这种系统从设计之初就面向物联网场景,强调低功耗、连接、安全、协同和云端接入。

这类系统更重视:

  • 物联网协议;
  • 云平台连接;
  • 设备管理;
  • 安全可信;
  • 动态升级。

五、物联网设备的两大类型

物联网设备按计算资源和存储能力大体可分为两类。

1. 运算和存储能力较强的嵌入式设备

这类设备资源比较充足,可以运行较复杂的操作系统。

例如:

  • 智能网关;
  • 智能摄像头;
  • 车载终端;
  • 工业控制主机;
  • 边缘计算设备。

对应操作系统可能是:

  • Android Things;
  • Windows 10 IoT;
  • 嵌入式 Linux。

2. 对功耗、存储、计算资源限制严格的终端设备

这类设备资源很少,通常要求低功耗、小体积、低成本。

例如:

  • 温湿度传感器;
  • 智能水表;
  • 烟雾报警器;
  • 远程监测节点;
  • 可穿戴设备。

对应操作系统一般是轻量级物联网操作系统,例如:

  • LiteOS;
  • FreeRTOS;
  • RT-Thread Nano;
  • Contiki;
  • TinyOS。

LiteOS 内核可精简到约 10KB 左右,说明它适合资源受限设备。


六、物联网操作系统的发展要求

五个要求:

  1. 能力伸缩要求;
  2. 互连互通要求;
  3. 运行安全要求;
  4. 功耗管理要求;
  5. 动态升级要求。

1. 能力伸缩要求

物联网设备非常碎片化,不同设备的硬件能力差别很大。

例如:

  • 有的设备只有几十 KB 内存;
  • 有的设备可以运行 Linux;
  • 有的只需要采集温度;
  • 有的需要视频识别;
  • 有的需要长期电池供电;
  • 有的可以接入电源。

所以物联网操作系统必须能够根据不同场景进行裁剪和配置。

这就是所谓的:

能力伸缩。

简单来说:

需要什么功能就保留什么功能,不需要的功能就裁剪掉。

例如一个简单传感器节点可能只需要:

  • 内核;
  • 任务调度;
  • 简单通信协议;
  • 低功耗管理。

而一个智能网关可能需要:

  • 文件系统;
  • TCP/IP 协议栈;
  • 安全组件;
  • 远程升级;
  • 数据库;
  • GUI;
  • 云平台接入。

2. 互连互通要求

物联网的核心之一是“连”。

物联网系统中存在各种不同网络:

  • 传感网;
  • 通信网;
  • 互联网;
  • 蓝牙网络;
  • Wi-Fi 网络;
  • ZigBee 网络;
  • NB-IoT 网络。

物联网操作系统需要支持这些网络之间的连接和数据交换。

互连互通要解决的问题包括:

  • 传感网之间如何互联;
  • 传感网与通信网如何互联;
  • 传感网与互联网如何互联;
  • 不同设备和协议之间如何通信。

所以物联网操作系统要内置或支持多种通信协议栈。


3. 运行安全要求

物联网设备数量庞大,很多部署在开放环境中,容易受到攻击。

安全问题包括:

  • 感知层设备被伪造;
  • 数据传输被窃听;
  • 设备被非法控制;
  • 云平台数据泄露;
  • 恶意固件升级;
  • 非授权访问。

因此物联网操作系统必须支持安全机制,例如:

  • 身份认证;
  • 数据加密;
  • 访问控制;
  • 安全启动;
  • 安全升级;
  • 内存保护;
  • 异常管理。

复习时可以记:

物联网安全涉及感知层安全、网络传输安全、应用数据安全和核心网络安全。


4. 功耗管理要求

很多物联网设备依靠电池供电,而且安装位置偏远,不方便频繁更换电池。

例如:

  • 智能水表;
  • 环境监测节点;
  • 农业传感器;
  • 物流追踪标签。

因此物联网操作系统必须具备低功耗管理能力。

低功耗可以从三个方面入手:

  1. 调度机制;
  2. 传输机制;
  3. 电源管理。

具体方法包括:

  • 动态调整 CPU 频率;
  • 空闲时进入低功耗模式;
  • 关闭不用的外设;
  • 降低总线频率;
  • 减少无线通信次数;
  • 优化任务调度。

一句话总结:

物联网操作系统不仅要让设备能运行,还要让设备尽可能省电地运行。


5. 动态升级要求

物联网终端数量多,部署位置分散,有些设备安装后很难拆卸。

例如:

  • 高处的传感器;
  • 地下水表;
  • 野外监测设备;
  • 工业现场终端。

如果软件有 bug 或功能需要更新,不能每次都人工拆下来烧录程序。

所以物联网操作系统需要支持:

  • 远程升级;
  • 动态升级;
  • 在线配置;
  • 自适应;
  • 容错;
  • 高健壮性。

这就是 OTA 的思想,即 Over-The-Air,空中升级。

考试可以答:

动态升级能力可以提高系统可维护性,降低现场维护成本,保证大规模物联网终端长期可靠运行。


七、物联网操作系统的五大特征

五大特征:

  1. 硬件驱动和操作系统内核可分离性;
  2. 可配置剪裁性;
  3. 协同互用性;
  4. 自动与智能化;
  5. 安全可信性。

1. 硬件驱动和操作系统内核可分离性

物联网硬件平台差异很大。

如果驱动和内核强绑定,每换一块硬件就要大改系统,开发成本很高。

所以物联网操作系统要尽量把硬件驱动和操作系统内核分离,使系统更容易移植。


2. 可配置剪裁性

这是最重要的特征之一。

不同设备只保留需要的功能模块。

例如:

  • 小型传感器:只保留内核 + 简单协议栈;
  • 智能网关:保留文件系统、网络协议、安全组件、远程管理等;
  • 智能终端:可能还需要 GUI 和数据库。

3. 协同互用性

物联网不是单设备运行,而是大量设备协同工作。

所以操作系统要支持:

  • 设备与设备协同;
  • 设备与云平台协同;
  • 设备与手机 App 协同;
  • 多协议互通。

4. 自动与智能化

物联网设备数量庞大,不可能全部依赖人工管理。

所以系统要具备一定自动化能力,例如:

  • 自动发现设备;
  • 自动配置;
  • 自动连接云平台;
  • 自动告警;
  • 自动诊断;
  • 智能调度。

5. 安全可信性

物联网设备涉及生活、工业、交通、医疗等场景,安全问题非常重要。

所以物联网操作系统必须保证:

  • 设备可信;
  • 数据可信;
  • 通信可信;
  • 升级可信;
  • 访问可信。

八、物联网操作系统与传统嵌入式操作系统的区别

表格总结如下:

对比项 物联网操作系统 传统嵌入式操作系统
专用性 较高
可配置剪裁性 较低
协同互用性 较低
驱动与内核可分离性 较低
自动与智能化 较低
安全可信性 较低

传统嵌入式系统更关注单个设备内部控制。 物联网操作系统除了控制设备,还要关注联网、协同、安全、低功耗和远程维护。

可以这样背:

传统嵌入式操作系统强调“专用控制”;物联网操作系统强调“连接、协同、裁剪、安全和智能”。


九、物联网操作系统的发展趋势

五个趋势:

  1. 面向新型智能化终端,提升软硬件支撑能力;
  2. 开源为主、闭源并存;
  3. 围绕操作系统和物联网平台建立生态;
  4. 解决物联网安全问题;
  5. 云端人工智能技术与物联网操作系统结合。

这里重点理解两个趋势:

1. 操作系统与云平台结合

未来物联网设备不仅是本地运行,还会连接云平台。

例如:

  • 数据上传云端;
  • 云端分析;
  • 远程控制;
  • 远程升级;
  • 设备管理。

所以物联网操作系统会和物联网平台深度结合。


2. AI 与物联网结合

未来物联网不仅采集数据,还会结合 AI 进行智能分析。

例如:

  • 智能摄像头识别异常行为;
  • 工业设备预测性维护;
  • 智能家居自动学习用户习惯;
  • 可穿戴设备分析健康状态。

这就是 AIoT,即人工智能 + 物联网。


十、物联网操作系统体系结构

体系结构包括:

  1. 操作系统内核;
  2. 外围功能组件;
  3. 物联网协同框架;
  4. 通用智能引擎;
  5. 集成开发环境;
  6. 安全框架。

这些模块不是所有系统都必须完整具备,可以根据应用场景裁剪。


1. 操作系统内核

内核是最核心部分,负责:

  • 线程/任务管理;
  • 调度;
  • 内存管理;
  • 同步机制;
  • 中断管理;
  • 时钟管理;
  • 安全与异常管理。

没有内核,系统无法管理任务和硬件资源。


2. 外围功能组件

外围功能组件包括:

  • 文件系统;
  • TCP/IP 协议栈;
  • 无线通信协议;
  • 数据库;
  • GUI;
  • XML 解析;
  • 远程升级;
  • 远程诊断;
  • 远程配置。

它们不是内核本身,但为实际应用提供重要支撑。


3. 物联网协同框架

协同框架用于实现不同设备、平台、终端之间的协同。

例如:

  • 设备与设备协同;
  • 设备与云平台协同;
  • 设备与手机协同;
  • 终端与网关协同。

如果一个应用只需要简单连接,可能不需要完整协同框架。 如果需要多个设备配合工作,就需要协同框架支持。


4. 通用智能引擎

智能引擎用于支持更复杂的智能化应用。

例如:

  • 数据分析;
  • 智能决策;
  • 模式识别;
  • AI 推理;
  • 自动控制。

小型传感器节点未必需要智能引擎,但边缘计算设备或智能终端可能需要。


5. 集成开发环境

集成开发环境用于支持开发者编写、编译、下载和调试程序。

后面会讲到交叉开发环境,就是开发物联网操作系统和嵌入式软件时常用的模式。


6. 安全框架

安全框架负责保证设备、数据、通信和升级的安全。

包括:

  • 加密;
  • 认证;
  • 权限控制;
  • 安全启动;
  • 安全升级;
  • 异常隔离。

十一、物联网操作系统内核特点

物联网操作系统内核应该具备五个特点。

1. 内核尺寸伸缩性强

不同设备资源不同,内核必须能大能小。

实现方式有两种:

重新编译

根据应用需求选择功能模块,然后重新编译内核。

适合小型系统。

二进制模块选择加载

内核初始化后,根据配置文件加载需要的二进制模块。

适合内核较大、功能模块较复杂的系统。


2. 实时性强

物联网设备很多都涉及实时控制。

例如:

  • 工业控制;
  • 电机控制;
  • 报警系统;
  • 医疗监测;
  • 智能交通。

实时性主要体现在:

  • 中断响应实时性;
  • 线程或任务调度实时性。

也就是说,外部事件发生后,系统要能及时响应;高优先级任务要能及时执行。


3. 内核架构可扩展性强

物联网硬件变化快,新的传感器、新的通信模块、新的外设会不断出现。

所以内核要设计成框架式结构,通过接口和规范支持扩展。

例如:

  • 增加新的设备驱动;
  • 增加新的通信协议;
  • 增加新的文件系统;
  • 动态加载核心模块。

4. 安全可靠

很多物联网设备需要长期无人值守运行。

因此内核必须可靠,不能频繁死机。

同时需要支持:

  • 内存保护;
  • 异常管理;
  • 错误隔离;
  • 安全机制。

5. 节能省电

内核应根据系统状态切换运行模式。

例如:

  • 正常运行模式;
  • 空闲模式;
  • 睡眠模式;
  • 深度睡眠模式。

系统空闲时降低功耗,有任务时再唤醒执行。


十二、线程管理,也叫任务管理

线程是实现任务的载体,是物联网操作系统中最基本的调度单位。

在 RTOS 中,经常把线程叫作任务 Task。

一个复杂应用可以拆成多个任务。

例如智能家居设备可以拆成:

  • 传感器采集任务;
  • 网络通信任务;
  • 按键扫描任务;
  • 显示任务;
  • 控制任务;
  • 低功耗管理任务。

操作系统调度器负责决定哪个任务先运行、哪个任务后运行。


为什么需要任务管理?

因为物联网设备通常要同时处理多个事情。

例如智能手环要同时:

  • 检测心率;
  • 记录步数;
  • 显示时间;
  • 接收手机消息;
  • 管理蓝牙连接;
  • 控制电量消耗。

如果用裸机 while 循环写,会很混乱。 用 RTOS 之后,每个功能可以变成独立任务,结构更清晰。


十三、线程间同步

多线程系统中,不同线程经常需要协调执行。

1. 线程同步是什么?

线程同步是指:

多个线程通过某种机制控制执行顺序,保证任务之间按照正确关系执行。

常见机制包括:

  • 互斥量;
  • 事件对象;
  • 临界区;
  • 信号量。

2. 临界资源

临界资源是:

一次只能被一个线程访问的资源。

例如:

  • 串口;
  • I2C 总线;
  • 共享变量;
  • 文件;
  • 显示屏;
  • 网络缓冲区。

如果多个线程同时访问同一个资源,可能会出错。


3. 临界区

临界区是:

线程中访问临界资源的那段代码。

例如两个任务都要修改同一个全局变量,那么修改这个变量的代码就属于临界区。

为了避免冲突,需要加锁或使用互斥量。


4. 举例理解

假设任务 A 和任务 B 都要通过串口发送数据。

如果没有同步机制:

  • A 发送一半;
  • B 插进来也发送;
  • 最终串口数据混乱。

如果使用互斥量:

  • A 先获得串口使用权;
  • B 等待;
  • A 发送完释放;
  • B 再发送。

这就是线程同步的作用。


十四、线程间通信

线程同步强调“执行顺序控制”,线程通信强调“信息传递”。

常见方式:

  1. 消息队列;
  2. 信号。

1. 消息队列

消息队列是一种异步通信方式。

它可以接收来自:

  • 线程;
  • 中断服务程序。

发送方把消息放入队列,接收方从队列中取消息。

如果队列为空,接收线程可以挂起等待。 当有新消息到达时,系统会唤醒该线程。


2. 消息队列举例

例如温度采集任务采集到数据后,把数据放入消息队列。

网络上传任务从消息队列中读取温度数据,然后上传到云端。

这样两个任务之间不需要直接调用彼此,只通过消息队列传递数据。

优点:

  • 降低耦合;
  • 支持异步通信;
  • 适合生产者-消费者模型。

3. 信号

信号称为软中断信号,它在软件层面模拟中断机制。

一个线程收到信号,就像 CPU 收到中断请求一样,需要进行相应处理。

信号适合用于通知事件发生。

例如:

  • 网络断开;
  • 数据到达;
  • 按键触发;
  • 定时器超时。

十五、内存管理

内存管理是操作系统内核中非常重要的子系统。

PPT中提到,内存管理主要包括:

  1. 内存的分配和回收;
  2. 地址转换;
  3. 内存扩充;
  4. 内存共享与保护。

1. 为什么需要内存管理?

程序运行时,变量和中间数据存放在 RAM 中。 操作系统需要决定:

  • 哪块内存分给哪个任务;
  • 用完后如何回收;
  • 多个任务是否可以共享;
  • 如何防止任务越界访问。

2. 嵌入式内存管理的特点

三个特点:

第一,实时性要求高

实时系统中,内存分配时间最好是确定的。

如果一次内存分配有时很快、有时很慢,就会影响实时性。

第二,容易产生内存碎片

随着不断申请和释放内存,空闲内存可能被切割成很多小块。

这就是内存碎片。

即使总空闲内存很多,也可能因为没有连续大块空间而分配失败。

第三,不同资源环境使用不同算法

小型 MCU 和大型嵌入式 Linux 系统资源不同,所以内存管理算法也不同。


3. 小内存管理算法

小内存管理算法。

它的基本思想是:

  • 把内存区域划分为若干内存块;
  • 每个内存块带有管理信息;
  • 管理信息记录该块是否被分配;
  • 分配时寻找合适空闲块;
  • 释放时检查相邻空闲块并合并。

这种方法适合内存资源有限的系统。


4. slab 和 memheap

其他方法:

  • slab;
  • memheap。

slab

slab 是 Linux 中常见的内存分配机制,适合频繁分配固定大小对象。

优点是效率较高,可以减少碎片。

memheap

memheap 是一种堆内存管理方式,用于管理动态内存分配。

考试不一定要求展开,但要知道它们属于内存管理算法或机制。


十六、时钟管理

操作系统通过时间来规范任务执行。

操作系统中最小的时间单位是时钟节拍。

时钟节拍可以理解为系统心跳。

它来自周期性中断。

例如系统每 1ms 产生一次时钟中断,那么 RTOS 就可以根据这些时钟节拍进行:

  • 任务延时;
  • 超时判断;
  • 时间片轮转;
  • 定时器处理;
  • 系统时间维护。

所以时钟管理是任务调度和时间控制的基础。


十七、中断管理

中断是嵌入式系统非常重要的概念。

1. 什么是中断?

定义可以理解为:

CPU 正在执行当前程序时,外部发生紧急事件,要求 CPU 暂停当前工作,转去处理该事件。处理完后,再回到原来的位置继续执行,这个过程叫中断。

例如:

  • 按键被按下;
  • 串口收到数据;
  • 定时器到期;
  • 传感器触发报警;
  • 网络模块产生事件。

这些都可以通过中断通知 CPU。


2. 中断系统的硬件组成

PPT中讲了三个部分:

  1. 设备;
  2. 中断控制器;
  3. CPU。

设备

设备是中断源。

例如串口、定时器、GPIO、传感器等。

当设备需要 CPU 服务时,就发出中断信号。

中断控制器

中断控制器负责收集中断源发出的中断请求,并进行管理。

它可以控制:

  • 中断优先级;
  • 中断类型;
  • 中断打开或关闭。

在 ARM Cortex-M 中,常见中断控制器是 NVIC。

CPU

CPU 是最终响应中断的部件。

CPU 接收到中断后,暂停当前程序,跳转到对应中断服务程序执行。


3. IRQ 编号(中断源的唯一编号)

系统中每个注册的中断源都有唯一编号,叫 IRQ 编号。

IRQ 编号用于区分不同中断源。

例如:

  • 定时器中断有自己的 IRQ;
  • 串口中断有自己的 IRQ;
  • 外部按键中断有自己的 IRQ。

4. 中断向量表

PPT中说:

中断向量表是所有中断处理程序的入口。

可以这样理解:

中断向量表是一张表,里面存放了不同中断对应的处理函数地址。

当某个中断发生时,CPU 根据中断号查表,找到对应的中断服务程序,然后跳转执行。


5. Cortex-M 中断处理过程

PPT中大意是:

  1. 中断触发;
  2. 中断控制器判断中断源;
  3. 将中断源转换为中断号;
  4. 查找中断向量表;
  5. 找到对应中断服务程序;
  6. CPU 跳转执行;
  7. 执行完后返回原程序。

6. 异常/中断响应步骤

PPT列出四步:

  1. 保护断点;
  2. 寻找中断入口;
  3. 执行中断处理程序;
  4. 中断返回。

可以这样记:

保存现场 → 查找入口 → 执行服务程序 → 恢复现场。


十八、外围功能组件

物联网操作系统除了内核外,还需要很多外围组件。

PPT把这些组件称为:

  • 外围功能组件;
  • 中间件;
  • 组件与服务。

它们可以根据应用场景裁剪。


外围组件包括哪些?

PPT中列了很多:

  1. 远程升级;
  2. 文件系统;
  3. 外部存储;
  4. 远程配置;
  5. 远程诊断;
  6. 远程管理;
  7. 网络功能;
  8. 无线通信支持;
  9. XML 文件解析;
  10. GUI 图形用户界面;
  11. 动态加载应用程序。

这些组件不是每个物联网设备都必须有。

例如一个简单温度传感器可能不需要 GUI,也不需要数据库。 但一个智能网关可能需要文件系统、网络协议栈、远程管理和安全组件。


十九、文件系统

1. 文件系统是什么?

文件系统是一种系统软件,用来管理文件和存储设备。

它负责:

  • 文件存储;
  • 文件访问;
  • 目录组织;
  • 数据缓冲;
  • 文件权限;
  • 数据保护;
  • 文件共享。

2. 文件系统主要功能

PPT中提到:

  1. 管理存储设备空间;
  2. 记录空闲区和占用区;
  3. 支持文件创建、修改、删除;
  4. 支持文件和目录按名访问;
  5. 支持分层目录结构;
  6. 支持数据保护;
  7. 支持文件共享。

3. 物联网操作系统文件系统与嵌入式文件系统的关系

由于物联网终端和网关本质上是嵌入式系统,所以物联网操作系统文件系统和嵌入式文件系统关系密切。

很多物联网操作系统直接使用或改造嵌入式 Linux 文件系统。


4. Flash 存储器

PPT专门讲了 Flash。

Flash 的特点:

  • 非易失;
  • 可靠性高;
  • 存储密度高;
  • 价格低;
  • 可擦写。

Flash 的擦除和读写特点:

  • 擦除以为单位;
  • 读写以页为单位。

5. Nor Flash 与 Nand Flash

类型 特点 适用场景
Nor Flash 容量小,可直接运行代码,访问方便,但擦写慢 存储程序代码
Nand Flash 容量大,改写速度快,适合大量数据存储 U盘、存储卡、数据存储

考试中可以这样答:

Nor Flash 适合存储小体积代码,支持代码直接运行;Nand Flash 容量大、改写快,适合大量数据存储。


二十、电源管理

电源管理是物联网操作系统的重要功能。

PPT中提到,可以通过以下方式降低能耗:

  • 调整主控时钟频率;
  • 改变工作电压;
  • 调整总线频率;
  • 关闭不用的总线;
  • 关闭外设工作时钟;
  • 让 CPU 进入低功耗模式。

低功耗管理分为三类:

1. 处理器电源管理

主要方式:

  • 动态调整 CPU 频率;
  • 系统空闲时调整工作模式。

例如 CPU 不忙时降低频率,甚至进入睡眠模式。


2. 设备电源管理

主要方式:

  • 关闭闲置外设。

例如暂时不用 Wi-Fi,就关闭 Wi-Fi 模块;不用显示屏,就关闭背光。


3. 系统平台电源管理

针对特定平台进行定制优化。

例如某些开发板有特殊电源芯片、特殊传感器、特殊总线,需要专门管理。


二十一、交叉开发环境

这部分属于嵌入式开发基础。

1. 为什么需要交叉开发?

嵌入式设备资源有限,通常不能直接在设备上写代码、编译代码。

例如一个 MCU 开发板没有屏幕、键盘,也没有完整编译器。

所以需要用 PC 作为开发主机,在 PC 上编写和编译程序,然后下载到目标板运行。


2. 主机-目标机模式

交叉开发环境由两部分组成:

名称 含义
主机 开发用 PC
目标机 嵌入式开发板或实际设备

开发流程是:

  1. 在主机上编辑代码;
  2. 使用交叉编译工具链编译;
  3. 生成目标机可执行代码;
  4. 下载到目标机;
  5. 在目标机上运行和调试。

3. 什么是交叉编译?

交叉编译是:

在一个平台上生成另一个平台可以执行的代码。

例如:

在 Windows 或 Linux PC 上编译生成 ARM 开发板可以运行的程序。

这就是交叉编译。


4. 交叉编译环境组成

PPT中提到,交叉编译环境由以下工具组成:

  • 编译器;
  • 连接器;
  • 解释器。

更广义地说,交叉工具链还包括:

  • 预处理器;
  • 编译器;
  • 汇编器;
  • 链接器;
  • 调试器;
  • 库文件。

二十二、GCC 编译过程

PPT中讲了 GCC。

GCC 是 GNU Compiler Collection,是 Linux 平台常用编译工具。

GCC 编译一个 C 程序通常经历四个步骤:

  1. 预处理;
  2. 编译;
  3. 汇编;
  4. 链接。

1. 预处理

预处理主要处理:

  • 头文件包含;
  • 宏定义;
  • 条件编译;
  • 注释删除。

输入:

file.c

输出:

file.i

2. 编译

编译阶段检查代码语法,并把 C 代码翻译成汇编代码。

输入:

file.i

输出:

file.s

3. 汇编

汇编阶段把汇编代码转换成机器相关的目标文件。

输入:

file.s

输出:

file.o

4. 链接

链接阶段把目标文件和库文件连接起来,生成可执行文件。

输入:

file.o

输出:

hello

5. 静态库和动态库

PPT中讲了两种库。

静态库

特点:

  • 编译链接时把库代码全部加入可执行文件;
  • 可执行文件较大;
  • 运行时不再需要库文件;
  • 后缀一般是 .a

动态库

特点:

  • 编译链接时不把库代码全部加入可执行文件;
  • 程序运行时再加载库;
  • 可执行文件较小;
  • 可以节省系统开销。

二十三、AT 组件

AT 指令在物联网通信模块中非常常见。

例如:

  • ESP8266 Wi-Fi 模块;
  • 4G 模块;
  • NB-IoT 模块;
  • 蓝牙模块。

1. AT 指令是什么?

AT Commands 是 AT 服务器和 AT 客户端之间进行设备连接与数据通信的命令集。

通信方式可以是:

  • UART;
  • SPI 等。

通常 MCU 作为 AT Client,通信模块作为 AT Server。


2. AT Client 和 AT Server

AT Client

负责:

  • 发送命令;
  • 等待响应;
  • 解析响应数据;
  • 获取模块状态。

AT Server

负责:

  • 接收命令;
  • 判断命令格式;
  • 执行对应操作;
  • 返回响应数据;
  • 必要时主动上报数据。

3. AT 指令组成

AT 指令一般由三部分组成:

  1. 前缀;
  2. 主体;
  3. 结束符。

格式类似:

AT+命令=参数\r\n

其中:

  • 前缀一般是 AT
  • 主体包括命令、参数和数据;
  • 结束符通常是 <CR><LF>,也就是 \r\n

4. AT Server 发给 AT Client 的数据

PPT中分成两类:

响应数据

这是 AT Client 发送命令后,AT Server 返回的数据。

例如:

OK
ERROR

URC 数据

URC 是 AT Server 主动发送的数据。

例如:

  • Wi-Fi 断开;
  • TCP 收到数据;
  • 网络状态变化;
  • 模块异常。

URC 不一定是因为 Client 刚刚发了命令,而是模块主动通知。


5. ESP8266 基础 AT 指令

PPT列举了几个基础指令:

AT

功能:

测试 AT 指令功能是否正常。

AT+GMR

功能:

查询模组固件版本信息。

AT+RST

功能:

软复位模组。

这些指令很基础,但考试可能会考“AT 指令的组成”或者“AT 数据分为哪两种”。


二十四、本章重点背诵版

下面是适合考前背诵的内容。

1. 物联网操作系统定义

物联网操作系统是运行在物联网设备上的操作系统,向上承接应用,向下衔接硬件平台,并提供网络协议栈、设备管理、安全管理、功耗管理、远程升级和多设备协同等功能。


2. 物联网操作系统的发展要求

物联网操作系统的发展要求包括:

  1. 能力伸缩要求;
  2. 互连互通要求;
  3. 运行安全要求;
  4. 功耗管理要求;
  5. 动态升级要求。

3. 物联网操作系统的五大特征

物联网操作系统的五大特征是:

  1. 硬件驱动和操作系统内核可分离性;
  2. 可配置剪裁性;
  3. 协同互用性;
  4. 自动与智能化;
  5. 安全可信性。

4. 物联网操作系统体系结构

物联网操作系统由以下几个子系统组成:

  1. 操作系统内核;
  2. 外围功能组件;
  3. 物联网协同框架;
  4. 通用智能引擎;
  5. 集成开发环境;
  6. 安全框架。

其中内核是核心,外围组件和协同框架根据应用需求进行裁剪。


5. 物联网操作系统内核功能

内核主要功能包括:

  1. 线程/任务管理;
  2. 线程同步;
  3. 线程通信;
  4. 内存管理;
  5. 时钟管理;
  6. 中断管理;
  7. 安全与异常管理;
  8. 电源管理相关支持。

6. 线程同步

线程同步是多个线程通过互斥量、事件对象、临界区等机制控制执行顺序,防止多个线程同时访问临界资源。

关键词:

  • 临界资源:一次只能被一个线程访问的资源;
  • 临界区:访问临界资源的代码段。

7. 线程通信

常见线程间通信方式包括:

  1. 消息队列;
  2. 信号。

消息队列是一种异步通信方式,可以缓存消息;信号类似软件层面的中断机制,用于通知事件发生。


8. 内存管理

内存管理主要包括:

  1. 内存分配和回收;
  2. 地址转换;
  3. 内存扩充;
  4. 内存共享与保护。

特点:

  • 实时系统要求内存分配时间确定;
  • 动态分配容易产生内存碎片;
  • 不同资源环境采用不同内存分配算法。

常见方法:

  • 小内存管理算法;
  • slab;
  • memheap。

9. 中断处理过程

中断处理一般包括:

  1. 保护断点;
  2. 寻找中断入口;
  3. 执行中断处理程序;
  4. 中断返回。

也可以背成:

保存现场 → 查找入口 → 执行服务程序 → 恢复现场。


10. 交叉编译

交叉编译是在一个平台上生成另一个平台可执行代码的过程。

嵌入式开发通常采用主机-目标机模式:

  • 主机:PC,用于编辑、编译、调试;
  • 目标机:嵌入式开发板,用于运行程序。

11. GCC 编译四步骤

GCC 编译过程包括:

  1. 预处理;
  2. 编译;
  3. 汇编;
  4. 链接。

对应文件变化:

file.c → file.i → file.s → file.o → 可执行文件

12. AT 指令

AT 指令由三部分组成:

  1. 前缀 AT;
  2. 主体,即命令、参数和数据;
  3. 结束符,一般为 \r\n

AT Server 向 AT Client 发送的数据包括:

  1. 响应数据;
  2. URC 主动上报数据。

二十五、考试可能这样问

题目1:物联网操作系统的特点是什么?

答:

物联网操作系统的特点包括硬件驱动和操作系统内核可分离、可配置剪裁、协同互用、自动与智能化、安全可信。由于物联网设备具有碎片化、异构化和资源受限等特点,物联网操作系统必须能够根据不同硬件和应用场景进行裁剪配置,并支持设备联网、低功耗、安全运行和远程维护。


题目2:物联网操作系统有哪些发展趋势?

答:

物联网操作系统的发展趋势包括:面向新型智能化终端提升软硬件支撑能力;开源为主、闭源并存;围绕操作系统和物联网平台建立生态;加强物联网安全解决方案;云端人工智能技术与物联网操作系统结合。


题目3:简述物联网操作系统体系结构。

答:

物联网操作系统通常由操作系统内核、外围功能组件、物联网协同框架、通用智能引擎、集成开发环境和安全框架组成。其中内核负责任务管理、内存管理、同步通信、时钟和中断管理;外围功能组件提供文件系统、网络协议栈、远程升级等功能;协同框架支持设备、平台和终端之间互联互通;安全框架保障系统安全可信。


题目4:物联网操作系统内核具有哪些功能?

答:

物联网操作系统内核主要具有线程或任务管理、线程同步、线程间通信、内存管理、时钟管理、中断管理、安全与异常管理等功能。同时,物联网操作系统内核还需要具备尺寸可伸缩、实时性强、架构可扩展、安全可靠和节能省电等特点。


题目5:线程间通信一般采用哪些方式?

答:

线程间通信常见方式有消息队列和信号。消息队列可以接收线程或中断服务程序发送的消息,并将消息缓存在队列中,接收线程可以异步读取;信号是在软件层面对中断机制的模拟,用于通知线程某个事件已经发生。


题目6:内存管理一般有哪些算法或机制?

答:

内存管理常见算法或机制包括小内存管理算法、slab 分配机制和 memheap 管理算法。小内存管理算法适合资源受限环境,通过内存块管理实现分配和释放;slab 常用于 Linux 系统,适合固定大小对象的高效分配;memheap 用于堆内存动态管理。


二十六、本章一句话总结

这章可以用一句话概括:

物联网操作系统是在嵌入式操作系统基础上,面向物联网设备的连接、协同、安全、低功耗、动态升级和智能化需求发展起来的系统软件,其核心由内核、外围组件、协同框架、智能引擎、开发环境和安全框架组成。