作者不保证文档内容的准确性与真实性,请仔细甄别。
“嵌入”的意思就是将软件“写入”到硬件设备中,使其在特定的功能需求下稳定运行。
与普通电脑不同的是,嵌入式设备中的软件通常不能轻易更改。比如微波炉、洗衣机的按钮或汽车的中控系统,它们的功能在设计时就已固定,用户无法随意修改。嵌入式系统通常是专为特定用途设计的,因此修改的需求很少,同时考虑到成本和可靠性等因素,保持固定的软件设计往往是最优选择。
| 特征 | 通用计算机 | 嵌入式系统 |
|---|---|---|
| 外观和类型 | 可以直接看到,比如台式机、笔记本。按性能分为大型机、中型机、小型机和微机。 | 隐藏在设备内部,如家电、汽车系统等,应用范围广,外观各不相同。 |
| 组成 | 使用通用处理器,配有标准的连接接口和外部设备,软件和硬件分开工作。 | 专为特定用途设计,处理器内部集成多种功能,软件与硬件紧密结合。 |
| 开发方式 | 开发和运行都在普通电脑上进行。 | 在普通电脑上开发,但运行在嵌入式设备上。 |
| 功能修改 | 可以随时安装或修改应用程序。 | 一般不能修改或重新编程。 |
初级嵌入式系统
**代表平台:**MCS51系列 8位MCU **常用芯片:**8051 特点:
中级嵌入式系统 **代表平台:**ARM7 / Cortex-M3 / Cortex-M4 系列 32位MCU 常用芯片: STM32系列 特点:
具有较强的处理能力,支持定时、多任务调度等功能。
通常配合轻量级实时操作系统(RTOS)如 FreeRTOS。
适用于工业自动化、智能家居、医疗设备等。 **示例:**STM32微控制器
高级嵌入式系统 代表平台:Cortex-A8 / Cortex-A15 32/64位处理器 **常用芯片:**Raspberry Pi 特点:
运行复杂的操作系统,如 Linux、Android。
具备丰富的外设接口,适合多任务、多媒体处理等应用。
适用于智能终端、机器人、边缘计算等高端应用。 **示例:**树莓派开发版
| 组成部分 | |
|---|---|
| 微处理器 | 中心处理单元,负责执行任务和控制系统 |
| 输入通道 | 用于接收外部输入信号,例如传感器、按钮等 |
| 输出通道 | 用于输出控制信号,例如驱动马达、显示器等 |
| 存储器 | 存储程序和数据,例如闪存、RAM等 |
| 通信接口 | 用于与其他设备或系统进行数据交换,如USB、I2C、SPI等 |
| 人机接口 | 用户与系统交互的界面,例如显示屏、按钮、触摸屏等 |
| 操作系统(可选) | 管理硬件资源并为应用提供服务的系统 |
| 应用软件 | 实现特定功能的程序,如控制算法、数据处理等 |
在嵌入式系统中,任务按处理方式可划分为周期性任务(常规任务)和非周期性任务(突发事件)。
在嵌入式系统中,任务不仅需要根据紧急程度进行调度,还应根据任务的来源、优先级以及资源的分配情况进行综合安排。对于突发事件,系统通常会采用中断机制来处理。
“突发情况”的优先级处理逻辑:
什么是“突发情况”?
1 想象一下,你正在专心做作业。突然,发生了需要你立刻处理的事情,比如有人敲门。这就是一个“突发情况”,在单片机里我们叫它**中断**。中断发生了,怎么办?—— NVIC:处理中断的“管家”
1 在STM32单片机里,有一个叫做 **NVIC**(嵌套向量中断控制器)的“管家”,专门负责处理这些突发情况。它就像一个指挥中心,告诉单片机:1 这个过程就是**中断的基本处理逻辑**:发生突发情况,停止当前任务,处理突发情况,然后回到原先的任务。找到程序才能执行,“开门“程序在哪个位置?—— 中断向量表
1 NVIC里有一本“中断向量表”,就像一个地址簿,记录了每种突发情况的处理程序在哪里。当敲门(外部中断)发生时,NVIC就会查找这本“地址簿”,找到“开门”程序的地址,然后单片机就会跳过(正在做的事情)去执行这个程序。正在处理一个中断,此时另一个中断发生了,怎么办?—— 中断嵌套
1 这个过程就是**中断嵌套**:一个中断发生时,可以被另一个更紧急的中断打断。怎么知道哪个任务更重要?—— 中断优先级
1 这个过程就是**中断优先级**:更紧急的,优先级更高,优先处理。NVIC是如何自动判断优先级的?
在STM32等嵌入式系统中,中断优先级是由两个主要部分构成的:
抢占优先级:
1 决定是否能够打断当前正在执行的任务:优先级数值越小,抢占优先级越高,抢占优先级高的中断会打断抢占优先级低的中断或任务。2
3 开发者可以通过`NVIC_SetPriority()`手动设置每个中断的抢占优先级。4
5 如果没有手动配置优先级,STM32在启动时会给所有中断分配**相同的默认优先级**,通常是最低优先级。但这不是“相同优先级”的意思,而是指系统默认配置给所有中断相同的优先级,具体数值可能会有所不同。子优先级:
1 决定在抢占优先级相同的情况下,哪个中断先执行:抢占优先级相同的中断会根据子优先级决定执行顺序,优先级数值越小,子优先级越高。2
3 如果没有手动配置优先级,STM32会按硬件中断号(IRQ)从小到大的顺序执行中断;但是在手动配置优先级后,执行顺序由已配置的**抢占优先级和子优先级**决定。总的来说,STM32的中断(或中断嵌套)执行规律是:
处理完了中断,之后该干什么?—— 末尾连锁机制
1 相较而言,C51不存在像 STM32 那样的“末尾连锁机制”。2
3 因此,C51则会回到写作业的地方,再去看门口是否有人送鸡蛋,处理完再回去写作业。这可能导致送鸡蛋的人(突发事件)等待时间变长。总结:
当发生突发事件(中断)时,NVIC负责:
“常规任务“的优先级处理逻辑:
什么是“常规任务”?
1 在嵌入式系统中,CPU的执行模式通常分为**线程模式**和**中断模式。**当CPU执行常规应用程序时,它运行在**线程模式**下。线程模式下的程序通常是用户代码,例如刷新LCD屏幕显示内容。常规任务也分轻重缓急,怎么处理?
1 如果安装了操作系统,在线程模式下,任务的优先级通常是由实时操作系统(RTOS)来管理,而不是直接由硬件(如NVIC)决定。RTOS通过任务调度算法(如抢占式调度)来控制多个任务的执行顺序,确保重要任务得到及时执行。2
3如果没安装RTOS,STM32仍然可以使用一些手段来管理和调度任务,但这些方法通常比RTOS提供的调度机制简单。以下是一些常见的管理方式:简单的任务轮询
1如果系统任务较少且不需要实时任务调度,可以使用轮询方式在主循环中依次执行任务。虽然这种方式没有优先级的概念,但开发者可以通过分配任务的执行顺序来间接安排它们的优先级。1int main() {2 while (1) {3 task1(); // 执行任务14 task2(); // 执行任务25 task3(); // 执行任务36 }7}使用定时器和软件定时器
1STM32可以利用硬件定时器来模拟某些任务的优先级。例如,使用一个定时器每秒触发一次任务,而另一个定时器每5秒触发一次任务。通过调节定时器的触发频率,间接控制任务的执行频率。1void TIM1_IRQHandler(void) {2 if (TIM1->SR & TIM_SR_UIF) { // 检查定时器溢出标志3 TIM1->SR &= ~TIM_SR_UIF; // 清除溢出标志4 task1(); // 每次定时器溢出时执行task15 }6}7
8void task1() {9 // 定时任务110}使用中断和标志位
1开发者可以结合中断处理程序与标志位来控制任务的优先级。比如,系统中某些任务会在中断中执行,而其他任务则依赖于主循环中定期检查标志位。这种方式可以实现任务的间接优先级。与上面提到的中断有什么区别?
1 中断优先级是由硬件控制的,通常通过NVIC来管理。中断优先级决定了系统在多个中断请求发生时,哪个中断应该先被处理。2
3 中断优先级在嵌入式系统中是硬件级别的管理,而线程优先级则是软件级别的调度。硬件中断的执行速度更快,且优先级比软件层面高,会尽早抢占系统资源进行处理。系统在处理任务时需要管理内存访问,以保证任务间的隔离和稳定。内存保护单元(MPU)作为一种硬件机制,通过控制任务的内存访问权限,防止冲突并提高系统安全性。
MPU是怎么控制权限的?
内存区域划分
1 MPU允许将物理内存划分为多个区域(通常是按一定大小的块,如1KB、4KB等)。每个区域可以单独配置访问权限,并且每个区域的权限是独立的,可以按任务、用户或内核级别进行设置。权限配置方式
MPU允许为每个内存区域单独配置不同的权限,通常可以设置如下几种模式:
程序尝试访问不允许访问的内存区域,会发生什么?
1 MPU会触发一个硬件异常,通常是一个中断,操作系统可以通过这个异常来进行错误处理。例如,任务试图写入只读区域时,MPU会立即停止该操作并通知系统。我写的C语言程序,是如何被转换成指令的?
我们在编程时使用的C语言本质上是对汇编语言的"封装",目的是减少代码量,让编程逻辑更符合人类思维方式。然而,单片机无法直接理解C语言,它需要经历以下转换过程:
编译器
将C语言代码转换为对应架构的汇编语言。例如,
1a = b + c;会被编译成类似以下汇编指令:
1LDR R0, [b] ; 将变量b的值加载到寄存器R02LDR R1, [c] ; 将变量c的值加载到寄存器R13ADD R2, R0, R1 ; R2 = R0 + R14STR R2, [a] ; 将R2的值存储到变量a汇编器
将汇编语言转换为机器指令(二进制码)。例如上面的ADD R2, R0, R1可能会被翻译为0xE0802001(Thumb-2指令的具体编码)。
链接器
将多个编译后的目标文件合并,分配内存地址,最终生成单片机能直接执行的二进制文件(.hex或.bin)。
为什么嵌入式系统要强调“实时性”?
嵌入式系统往往需要在严格的时间限制内响应事件。例如:
若响应超时,轻则功能异常,重则引发安全事故。
实时性的两大核心保障
硬件级快速响应 —— 中断与DMA
中断机制
立即暂停当前任务,优先处理紧急事件。
直接内存访问(DMA)
DMA(Direct Memory Access,直接内存访问)是一种硬件技术,允许外设(如传感器、存储设备等)与内存之间直接传输数据,无需CPU全程参与。 传统数据传输需要CPU逐字节处理数据,而DMA接管了这一传输任务,使CPU能并行执行其他计算任务。例如,当摄像头采集图像时,DMA直接将数据存入内存,CPU此时可以处理图像识别算法。这样,DMA不仅解放了CPU资源,还提升了系统运行效率并降低了功耗。
软件级时间管理 —— 实时操作系统(点击跳转)
片上资源是什么?具体有哪些?
片上资源,也称片上外设,是集成在微控制器(MCU)或处理器芯片内部的专用硬件模块,用于扩展核心处理器的功能。这些资源能独立执行硬件级操作(如数据采集、信号生成和协议通信),从而减轻CPU的负担。同时,它们也能与CPU协同工作,触发事件通知内核,共同完成复杂任务,构成完整的嵌入式系统。
如果这篇文章对你有帮助,欢迎分享给更多人!