计算机系统核心知识(嵌入式/单片机方向)

1. 计算机系统的核心:硬件、操作系统与应用软件的关系

这是一个分层管理的模型:

  • 硬件资源:CPU、内存、存储器、各类接口等构成物理基础。

  • 操作系统:作为核心系统软件,是硬件与应用程序之间的桥梁。

  • 应用软件:在操作系统之上运行,实现具体功能。

关系链:硬件资源 → 操作系统 → 应用软件

2. 操作系统的作用

操作系统主要承担两大核心任务:

  • 资源管理者:对CPU、内存、文件、外设等所有软硬件资源进行统一调度、管理与抽象,让应用软件无需直接操控复杂的硬件。

  • 服务提供者:为应用程序的开发与运行提供稳定、高效的编程接口与服务,如文件系统、网络通信、进程管理等。

嵌入式领域注意:在资源极其有限的简单系统(如经典的51、AVR、Cortex-M系列裸机开发)中,为追求极致效率、降低成本和复杂度,可以不用操作系统,而是由开发者直接管理硬件或使用轻量级调度器。

3. 计算机的进制与硬件基础
  • 物理本质:计算机中所有数据的存储、运算和传输,最终都依赖于数字电路中的高低电平

  • 逻辑表示:通常用高电平代表逻辑 “1”,低电平代表逻辑 “0”。这是二进制系统(0和1)的物理实现基础。

  • 进制运用:机器层使用二进制,编程时常用十六进制(用于简化二进制表示)和十进制。理解它们之间的转换至关重要。

4. 微型计算机系统的基本组成(嵌入式视角)

一个典型的微计算机系统(如嵌入式系统)包含以下层次:

  • 硬件层

    • 中央处理器:如单片机、微控制器、微处理器。

    • 存储器:RAM(运行内存)、ROM/Flash(存储程序与数据)。

    • 输入/输出设备与接口:GPIO、串口、ADC、屏幕、键盘等。

  • 系统软件层

    • 操作系统:如Linux、FreeRTOS、RT-Thread等,或无操作系统

    • 设备驱动:直接与硬件交互的底层软件。

  • 应用软件层:实现特定功能的用户程序。

程序的概念

1. 核心定义

程序是一系列有序指令的集合,其目的是指示计算机执行特定操作或解决某个问题。

2. 广义与狭义
  • 广义上,程序是为达到某个目标而设计的一系列步骤或行为。

  • 在计算机领域中,程序特指用计算机能够理解和执行的语言(编程语言)编写的指令序列。

3. 程序的存储与执行

程序通常保存在非易失性存储器(如硬盘、Flash)中。当需要运行时,它会被加载到内存中,由CPU逐条读取并执行指令。

4. 对程序员的关键要求

编写合格的程序,不仅需要掌握语法,更要求:

  • 清晰的逻辑思维事前的周密设计结构化与可读性

编程语言的发展过程

一、机器语言:计算机的“母语”

  • 本质:CPU能够直接识别和执行的二进制指令序列(由“0”和“1”组成),是计算机硬件层面的语言。

  • 特点

    • 极度依赖硬件:不同架构的CPU拥有不同的指令集,机器码也不同。

    • 难以使用

  • 评价:虽然执行效率最高,但因可读性、可移植性极差,仅适用于计算机发展初期。

二、汇编语言:机器语言的“助记符”

  • 本质:用英文助记符(如 ADDMOV)代替二进制操作码,用符号代替地址。它是机器语言的符号化表示,二者通常一一对应

  • 进步:相比机器语言,极大提升了可读性和编写效率。

  • 局限

    • 依然贴近硬件:与特定CPU架构强绑定,移植性差。

    • 抽象层级低:程序员仍需深入了解硬件细节,编写复杂程序的工作量依然巨大。

三、高级语言:人类的思维,计算机的执行

  • 核心思想:采用更接近人类自然语言和数学描述的语法。

  • 关键特征一条高级语言语句通常对应多条机器指令

  • 主要范式

    1. 面向过程语言:以 “过程”(函数) 为核心组织代码,关注解决问题的步骤。代表语言:C语言、Pascal。

    2. 面向对象语言:以 “对象” 为核心,将数据与操作数据的方法封装在一起,更利于模拟现实世界、构建大型复杂系统。代表语言:C++、Java、Python。


C语言的独特地位:连接高级与底层的桥梁

在众多高级语言中,C语言扮演着极其特殊且关键的角色:

  1. 系统级编程语言:它既是高级语言,又保留了直接操作内存、硬件的能力,被誉为“高级语言中的低级语言”或“系统编程语言”。

  2. 理解计算机系统的基石:学习C语言能帮助程序员深刻理解程序在计算机底层(如内存管理、指针、函数调用栈)是如何实现的,这是理解上层语言(如Java、Python)运行机制的基础。

  3. 底层开发的“天选之子”

    • 操作系统:Unix/Linux、Windows内核的绝大部分由C语言编写。

    • 嵌入式系统与驱动:单片机、嵌入式设备的应用程序及硬件驱动程序,主要使用C/C++开发。

    • 运行环境与编译器:许多高级语言的解释器、虚拟机(如Python解释器、Java虚拟机)和编译器本身,就是用C语言实现的。

嵌入式系统硬件核心概念

MPU(微处理器单元)

  • 仅包含中央处理器核心,不集成内存和外设。

  • 需要外部搭建 RAM、ROM 及各种外设控制器。

  • 常用于高性能、复杂操作系统(如 Linux)的嵌入式场景。

MCU(微控制器单元)

  • 将 CPU、RAM、ROM(Flash)、定时器、各种外设接口集成在单芯片上。

  • 资源相对较小,但集成度高、功耗低、成本低。

  • 适用于实时控制、物联网终端等场景。

 AP(应用处理器)

  • 面向消费电子(智能手机、平板)的高性能处理器。

  • 通常基于 ARM Cortex-A 系列,集成 GPU、多媒体编解码器、内存控制器等。

  • 一般运行复杂操作系统(Android、Linux)。

SoC(片上系统)

  • 将 MPU/MCU 的所有必要组件(CPU、内存、外设接口、电源管理、专用加速器等)集成在一个芯片上。

  • 现代 AP 也属于 SoC 的一种。

系统上电后的启动流程

  1. 嵌入式系统支持多种设备启动

  2. CPU 复位:硬件逻辑将 CPU 的程序计数器(PC)设置为复位向量地址(通常指向 ROM 或 Flash 的起始地址)。

  3. 从 ROM 执行:CPU 从 ROM(或 Flash)中读取并执行启动代码(Bootloader)。

  4. 初始化硬件:启动代码设置时钟、内存控制器、堆栈指针等。

  5. 加载映像:若系统有外部 RAM(如 SDRAM/DDR),启动代码将应用程序或操作系统从 ROM/Flash 复制到 RAM 中。

  6. 跳转执行:若支持 XIP,可直接在 ROM/Flash 中运行代码;否则,CPU 跳转到 RAM 中的程序入口,继续执行。

XIP(就地执行)

  • 程序代码直接在非易失存储器(如 NOR Flash)中运行,无需复制到 RAM 中。

  • 节省 RAM 空间,常用于 MCU 启动代码或小型嵌入式系统。

  • 要求存储器支持随机读取(如 NOR Flash),且总线接口支持直接寻址。

ROM 与 RAM 详解

类型全称特性
ROMRead-Only Memory非易失性,掉电不丢失;出厂时固化或通过特殊方式烧写;早期只读,现代多为 Flash(可擦写),但传统上仍称为 ROM
RAMRandom Access Memory易失性,掉电数据丢失;可随机读写,速度快

 RAM 的作用

  • 存放变量、堆栈、动态数据,可读可写。

  • 成本较高,片上 RAM 容量通常较小(KB~MB 级)。

  • 可外接大容量 RAM(如 DDR),通过内存控制器扩展。

ROM 的作用

  • 存储固件、启动代码、常量数据

  • 掉电后内容保留,确保系统每次上电都能启动。

  • 现代 ROM(Flash)支持在系统内编程(ISP),便于固件升级。

  • 可以使用 C 语言编写存储在 ROM 中的程序(编译器将代码生成到 ROM 地址空间)。

地址访问与内存控制器

  • CPU 发出的虚拟地址(或物理地址)由内存控制器负责解析。

  • 内存控制器根据地址范围判断目标设备(ROM、RAM、外设等),并将读写操作路由到对应的控制器:

    • DRAM 控制器 → 访问外部 RAM

    • NOR/NAND 控制器 → 访问 Flash/ROM

    • 外设总线(如 AHB/APB) → 访问 GPIO、UART、I²C 等外设寄存器

  • 这种机制使得 CPU 可以用统一地址空间访问内存和外设(内存映射 I/O)。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐