术语表
在开始这章之前,需要读者好好阅读这个术语表,避免网上流毒缩写产生的歧义
实时操作系统(Real-Time Operating System,简称 RTOS)
一种专门设计用来满足实时计算需求的操作系统。实时操作系统必须在规定的时间内完成特定任务,以保证系统的正确性和可靠性。实时系统通常分为硬实时(Hard Real-Time)和软实时(Soft Real-Time)系统。 以下是一些 RTOS 的主要特点:
- 确定性(Determinism):
- RTOS 提供确定性的任务调度,确保任务能够在预定的时间限制内完成。
- 任务调度:
- RTOS 通常采用优先级为基础的抢占式调度(Preemptive Scheduling)或多级反馈队列调度(Multilevel Feedback Queue Scheduling)来管理任务。
- 快速响应:
- 系统必须能够快速响应外部事件,如中断。
- 低延迟:
- 从事件发生到系统响应之间的延迟非常低。
- 可靠性:
- RTOS 设计时注重系统的可靠性和稳定性,以保证关键任务的执行。
- 资源管理:
- RTOS 有效管理 CPU 时间、内存和其他系统资源,以支持实时任务。 RTOS 广泛应用于以下领域:
- 嵌入式系统:如工业控制系统、汽车电子、医疗设备、航空航天等。
- 网络设备:如路由器、交换机等网络基础设施。
- 消费电子:如数字电视、智能手机等。
一些知名的 RTOS 包括:
- VxWorks
- QNX
- RTLinux
- FreeRTOS
- eCos
- RT-Thread
- uc/OS
RTOS 的选择取决于具体的应用需求,包括任务的实时性要求、系统资源、成本和开发工具等。
在不引起歧义的情况下,本教程的 RTOS 一般是指 FreeRTOS
板级支持包(Board Support Package,简称 BSP)
一组用于特定硬件平台的软件,它在该硬件平台上提供了硬件抽象层,使得操作系统或者用户应用能够在该硬件平台上运行。基本的 BSP 包含以下功能:
- 硬件初始化代码:这些代码负责在系统启动时配置硬件组件,如 CPU、内存、外设接口等,以确保它们处于正确的状态。
- 设备驱动程序:将硬件组件向上抽象为面向应用的 API,使操作系统和应用程序能够使用其与硬件设备进行交互。
更完善的还包括以下等:
- 系统启动代码:包括引导加载程序(Bootloader)和其他初始化代码,这些代码负责启动操作系统。
- 配置工具和脚本:用于配置和定制 BSP 的工具,以适应特定的硬件配置和操作系统需求。
- 调试和测试工具:帮助开发人员调试和测试硬件与软件接口的工具。
BSP 的主要目的是为了让操作系统和应用程序开发者不必关心底层硬件的具体细节,通过 BSP 提供的标准化接口来操作硬件。
在不引起歧义的情况下,本教程所说 BSP 是指最包含基本两个功能
统一可扩展固件接口(Unified Extensible Firmware Interface,简称 UEFI)
一种用于电脑启动和运行初始化固件服务的标准。它是 BIOS(基本输入/输出系统)的替代品,提供了一种更加现代化、可扩展且安全的固件接口。以下是 UEFI 的一些主要特点和功能:
- 启动管理:
- UEFI 提供了一种更加灵活和可管理的启动过程,支持从多个存储设备启动操作系统。
- 驱动支持:
- UEFI 支持在启动过程中加载和使用各种设备驱动程序,这意味着它可以更好地支持大容量磁盘和最新的文件系统。
- 图形用户界面:
- UEFI 支持高级图形用户界面(GUI),使得设置和配置固件更加直观。
- 安全启动:
- UEFI 实现了安全启动功能,它确保在启动过程中只加载和使用经过数字签名的软件,这有助于防止恶意软件在启动阶段运行。
- 网络功能:
- UEFI 支持网络功能,允许在启动过程中进行网络操作,例如从网络安装操作系统。
- 兼容性:
- UEFI 旨在向后兼容传统的 BIOS 系统,但为了充分利用 UEFI 的所有功能,操作系统和硬件需要明确支持 UEFI。
- 可扩展性:
- UEFI 的设计允许轻松添加新功能,使其能够适应未来的硬件和软件需求。 UEFI 的主要组件包括:
- UEFI 固件:这是嵌入在主板上的固件,负责初始化硬件并提供启动服务。
- UEFI 驱动程序:用于在 UEFI 环境中操作硬件的软件模块。
- UEFI Shell:一个命令行界面,允许用户执行固件级别的操作。
交叉编译工具链(Cross-Compilation Toolchain)
一套用于在一种处理器架构上编译目标平台特定代码的工具集合。它允许开发者在不同的硬件平台上编译代码,而无需目标硬件的直接支持。
处理器架构(Processor Architecture)
计算机硬件设计的基础,它定义了处理器的内部结构、指令集、数据路径、寄存器模型、中断和异常处理机制、内存管理单元(MMU)以及系统总线接口等。 处理器架构是软件和硬件之间交互的桥梁,它决定了软件如何与硬件进行通信和操作。
以下是几种常见的处理器架构:
- x86 架构:由 Intel 和 AMD 公司开发,是最常见的桌面和服务器处理器架构之一。它支持复杂指令集计算机(CISC)和虚拟化技术。
- ARM 架构:由 ARM Holdings 公司开发,主要用于移动设备和嵌入式系统。它支持精简指令集计算机(RISC)架构,并以其低功耗和高能效而闻名。
- MIPS 架构:由 MIPS Technologies 公司开发,是一种精简指令集计算机(RISC)架构。它曾经在许多工作站和服务器中使用,但现在更多地用于嵌入式系统。
- PowerPC 架构:由 IBM、Motorola 和 Apple 公司共同开发,主要用于服务器和工作站。它支持复杂指令集计算机(CISC)和 RISC 架构。
- SPARC 架构:由 Sun Microsystems 开发,现在由 Oracle 公司维护。它是一种高性能的 RISC 架构,主要用于服务器和超级计算机。
- RISC-V 架构:是一个开源的指令集架构,旨在成为现代处理器架构的标准。它支持精简指令集计算机(RISC)架构,并以其模块化和可扩展性而受到关注。
处理器架构的选择取决于多种因素,包括性能需求、能效、成本、生态系统支持、兼容性和特定应用场景。例如:
- ARM 架构因其低功耗和高能效而广泛用于移动设备
- x86 架构因其高性能和广泛的应用软件支持而成为桌面和服务器系统的首选
指令集(Instruction Set)
处理器架构的一部分,它定义了处理器可以理解和执行的机器指令的集合。指令集是软件和硬件之间的接口,它规定了处理器可以执行的操作,以及如何通过操作码和操作数来执行这些操作。
指令集可以分为以下几种类型:
- 复杂指令集计算机(CISC) :这种类型的指令集包含大量的指令,每个指令可以执行多个操作。CISC 架构的处理器通常具有复杂的指令解码器,能够解析和执行复杂的指令。这种架构的优点是每个指令可以完成更多的操作,从而减少总的指令数量。然而,复杂的指令解码和执行可能会导致性能下降。
- 精简指令集计算机(RISC) :这种类型的指令集包含较少的指令,每个指令只执行一个简单的操作。RISC 架构的处理器通常具有简单的指令解码器,能够快速解析和执行简单的指令。这种架构的优点是指令解码和执行速度快,但需要更多的指令来完成复杂的操作。
- 混合指令集计算机:这种类型的指令集结合了 CISC 和 RISC 的特点,包含一定数量的复杂指令和简单指令。这种架构的处理器可以根据需要使用复杂的指令或简单的指令来执行操作。
指令集的选择取决于多种因素,包括性能需求、能效、成本、生态系统支持、兼容性和特定应用场景。例如:
- CISC 架构的处理器因其能够执行复杂操作而广泛用于桌面和服务器系统
- RISC 架构的处理器因其简单高效的指令解码和执行而广泛用于移动设备和嵌入式系统
CMSIS (Cortex Microcontroller Software Interface Standard)
一个为 ARM Cortex-M 微控制器系列设计的标准化软件接口。它旨在为开发者提供一个统一的接口,使得在不同 ARM Cortex-M 微控制器之间移植和复用软件变得更加容易。CMSIS 的目的是减少为不同微控制器编写软件的复杂性,并允许开发者更容易地从一个微控制器迁移到另一个微控制器。
CMSIS 包括以下几个关键部分:
- CMSIS-Core:提供了一个基本框架,包括用于启动、中断处理、内存管理和异常处理的通用函数。
- CMSIS-DSP:提供了一个数字信号处理(DSP)的软件库,包含了用于信号处理操作的函数。
- CMSIS-RTOS:提供了一个实时操作系统(RTOS)接口,允许开发者选择并集成不同的 RTOS 实现。
- CMSIS-Device:为每个 ARM Cortex-M 微控制器定义了特定的寄存器映射和中断向量表。
- CMSIS-Driver:提供了一个设备驱动程序框架,用于访问微控制器的通用外设。
通过使用 CMSIS,开发者可以编写与硬件无关的代码,只需针对特定的微控制器进行一些小的修改或配置,就可以在不同的微控制器上运行。这极大地提高了开发效率,并简化了微控制器软件的维护和更新。
寄存器(Register)
计算机中央处理器(CPU)内部的高速存储单元,用于临时存储数据和指令。它们是 CPU 执行指令过程中不可或缺的一部分,因为它们可以提供比内存更快的访问速度,从而加快数据处理速度。
寄存器的种类和数量因 CPU 架构的不同而有所差异。常见的寄存器类型包括:
- 通用寄存器:用于存储操作数和中间结果,如 EAX、EBX、ECX、EDX 等(在 x86 架构中)。
- 程序计数器(PC):存储下一条要执行的指令的地址。
- 堆栈指针(SP):指向当前堆栈的顶部。
- 基址指针(BP):用于访问堆栈中的局部变量和函数参数。
- 指令寄存器(IR):存储当前正在执行的指令。
- 标志寄存器(FLAGS):存储执行指令后的状态标志,如零标志、符号标志、进位标志等。
- 段寄存器:在实模式下用于存储代码段、数据段和堆栈段的基地址。
寄存器的设计和优化对计算机的性能有着重要影响,因此现代 CPU 通常会有大量的寄存器,并且会采用各种技术来提高它们的访问速度和效率。