嵌入式系统开发核心基础:从硬件架构到程序语言
计算机系统核心知识(嵌入式/单片机方向)
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拥有不同的指令集,机器码也不同。
-
难以使用
-
-
评价:虽然执行效率最高,但因可读性、可移植性极差,仅适用于计算机发展初期。
二、汇编语言:机器语言的“助记符”
-
本质:用英文助记符(如
ADD,MOV)代替二进制操作码,用符号代替地址。它是机器语言的符号化表示,二者通常一一对应。 -
进步:相比机器语言,极大提升了可读性和编写效率。
-
局限:
-
依然贴近硬件:与特定CPU架构强绑定,移植性差。
-
抽象层级低:程序员仍需深入了解硬件细节,编写复杂程序的工作量依然巨大。
-
三、高级语言:人类的思维,计算机的执行
-
核心思想:采用更接近人类自然语言和数学描述的语法。
-
关键特征:一条高级语言语句通常对应多条机器指令。
-
主要范式:
-
面向过程语言:以 “过程”(函数) 为核心组织代码,关注解决问题的步骤。代表语言:C语言、Pascal。
-
面向对象语言:以 “对象” 为核心,将数据与操作数据的方法封装在一起,更利于模拟现实世界、构建大型复杂系统。代表语言:C++、Java、Python。
-

C语言的独特地位:连接高级与底层的桥梁
在众多高级语言中,C语言扮演着极其特殊且关键的角色:
-
系统级编程语言:它既是高级语言,又保留了直接操作内存、硬件的能力,被誉为“高级语言中的低级语言”或“系统编程语言”。
-
理解计算机系统的基石:学习C语言能帮助程序员深刻理解程序在计算机底层(如内存管理、指针、函数调用栈)是如何实现的,这是理解上层语言(如Java、Python)运行机制的基础。
-
底层开发的“天选之子”:
-
操作系统: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 的一种。
系统上电后的启动流程
-
嵌入式系统支持多种设备启动
-
CPU 复位:硬件逻辑将 CPU 的程序计数器(PC)设置为复位向量地址(通常指向 ROM 或 Flash 的起始地址)。
-
从 ROM 执行:CPU 从 ROM(或 Flash)中读取并执行启动代码(Bootloader)。
-
初始化硬件:启动代码设置时钟、内存控制器、堆栈指针等。
-
加载映像:若系统有外部 RAM(如 SDRAM/DDR),启动代码将应用程序或操作系统从 ROM/Flash 复制到 RAM 中。
-
跳转执行:若支持 XIP,可直接在 ROM/Flash 中运行代码;否则,CPU 跳转到 RAM 中的程序入口,继续执行。
XIP(就地执行)
程序代码直接在非易失存储器(如 NOR Flash)中运行,无需复制到 RAM 中。
节省 RAM 空间,常用于 MCU 启动代码或小型嵌入式系统。
要求存储器支持随机读取(如 NOR Flash),且总线接口支持直接寻址。
ROM 与 RAM 详解
| 类型 | 全称 | 特性 |
|---|---|---|
| ROM | Read-Only Memory | 非易失性,掉电不丢失;出厂时固化或通过特殊方式烧写;早期只读,现代多为 Flash(可擦写),但传统上仍称为 ROM |
| RAM | Random 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)。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)