嵌入式裸机设计--MCU常用裸机架构有哪些?

embedded/2025/3/17 0:29:43/

为什么是裸机设计

792125321入群学习更高效!

在MCU(微控制器单元)裸机开发中,我们常见的架构设计主要围绕如何高效管理资源和任务调度。认识这些开发方式,对我们开发一个小型项目来说及有好处!

下面介绍一下几种常用的裸机架构及其特点:

1. ​超级循环(Super Loop)​

  • ​原理:程序通过一个无限循环(while(1))不断轮询任务。这也是我们最为熟悉的开发方式!

  • ​特点:

  • 简单易实现,适合小型项目。

  • 任务按顺序执行,实时性差,高优先级任务可能被阻塞。

  • 无抢占机制,依赖任务主动释放CPU。

  • ​适用场景:简单控制任务(如LED闪烁、按键检测)。

核心:中断快速响应,主循环处理非实时任务。

例子:

 

 

运行过程:像流水线工人,永远重复三个动作:看一眼按键 → 调一下LED亮度 → 发会儿呆 → 再从头开始。

 

缺点:发呆时会卡住,不能同时做其他事(比如发呆时按键可能漏检查)。

2. ​前后台系统(Foreground-Background)

  • ​原理:

  • ​前台:由中断服务程序(ISR)处理紧急任务(如外部事件)。

  • ​后台:主循环处理非实时任务(如数据处理、状态更新)。

  • ​特点:

  • 中断响应快,适合异步事件处理。

  • 后台任务仍可能被中断打断,需注意资源共享问题(如使用临界区)。

例子:

 

 

运行过程:

 

  • ​急诊:按键按下时,中断立刻标记“有人按了”(不处理,只记下来)。

  • ​门诊:主循环看到标记后,慢慢处理按键,然后继续做杂活。 优点:急诊响应快,杂活不耽误。

  • ​适用场景:需要快速响应外部中断的应用(如传感器触发、通信接收)。

核心:顺序执行,无优先级,阻塞式延时。

 

3. ​状态机(State Machine)​

  • ​原理:将任务分解为多个状态,通过状态转移逻辑控制流程。

  • ​实现方式:

  • switch-case 结构或函数指针跳转。

  • 可能结合查表法(Lookup Table)提高效率。

  • ​特点:

  • 逻辑清晰,适合复杂流程(如协议解析、多步骤控制)。

  • 需合理设计状态迁移条件,避免死锁。

  • ​适用场景:通信协议(UART、SPI)、多阶段控制(如电机启动流程)。

核心:状态迁移由事件或条件触发,逻辑清晰。

例子:

 

 

运行过程:像交通灯,按规则切状态:

 

  • 默认关 → 按下按键切到闪烁 → 闪够时间切到常亮 → 保持常亮。 优点:逻辑清晰,适合多步骤流程(比如洗衣机:加水→洗衣→脱水)。

 

4. ​时间片轮转调度(Time-Sliced Scheduling)​

  • ​原理:利用定时器中断划分时间片,依次执行多个任务。

  • ​特点:

  • 伪并行多任务,任务切换由定时器触发。

  • 任务执行时间需短于时间片,否则可能阻塞其他任务。

  • 需平衡时间片长度和任务实时性。

  • ​适用场景:周期性任务(数据采集、显示刷新)。

核心:定时器划分时间片,任务按片切换。

例子:

 

 

运行过程:像妈妈做饭,定时切换任务:

 

  • 前10秒炒菜 → 后10秒煮汤 → 再切回炒菜 → 循环… 优点:假装“同时”做多件事,适合周期性任务(如每隔1秒读传感器)。

 

5. ​事件驱动架构(Event-Driven)​

  • ​原理:任务由事件触发(如中断、消息队列),而非轮询。

  • ​实现方式:

  • 中断标记事件,主循环检查事件标志并执行回调函数。

  • 可能使用事件队列管理多个事件。

  • ​特点:

  • 低功耗设计(可进入休眠模式等待事件)。

  • 需处理事件优先级和冲突。

  • ​适用场景:低功耗设备(如电池供电的IoT设备)。

核心:事件触发任务,无事件时休眠省电。

例子:

 

 

运行过程:像保安值班,平时睡觉 → 有事(比如报警)就处理 → 处理完继续睡。 优点:省电!适合电池设备(如无线门磁传感器)。

 

 

6. ​协作式调度(Cooperative Scheduling)​

  • ​原理:任务主动释放CPU控制权(如调用yield()),让其他任务运行。

  • ​特点:

  • 无抢占,依赖任务协作,实时性一般。

  • 避免资源竞争,适合单线程环境。

  • ​适用场景:任务间依赖性较强的应用(如顺序执行的数据处理链)。

架构选择建议

  • ​简单任务:超级循环或状态机。

  • ​实时响应:前后台系统 + 中断。

  • ​多任务伪并行:时间片轮转或事件驱动。

  • ​低功耗需求:事件驱动 + 休眠模式。

  • ​复杂逻辑:状态机分层设计(如Harel状态机)。

核心:任务通过yield()主动让出CPU,实现协作切换。

例子:

 

 

运行过程:像两人合作搬砖:

 

  • A搬几块 → 喊“换人!” → B接着搬 → 再换A… 优点:任务自己控制节奏,适合配合型工作流(如先读数据再处理)。

这些架构可单独使用或组合(如“时间片轮转 + 状态机”),具体取决于项目需求和资源限制。裸机开发的核心是平衡实时性、复杂度和资源开销。

题外话:

裸机编程在嵌入式开发中始终是优先考虑的方案,其核心优势在于极致的精简与高效。它直接操作硬件,无需操作系统(OS)中间层,使得资源占用近乎为零——所有内存和算力都可投入业务逻辑,尤其适合资源有限的低端MCU(如STM32F0系列或51单片机)。

此外,裸机程序通过中断和轮询的组合,能够实现硬实时响应,例如电机控制或传感器数据采集的微秒级延迟,这对工业设备等高精度场景至关重要。开发层面,裸机代码结构简单,调试透明,无需学习复杂的OS API,开发周期短且维护成本低,尤其适合功能单一的小型项目。

然而,裸机的局限性在复杂系统中逐渐显现。当系统需并行处理多任务(如同时运行通信协议解析、用户界面刷新和实时控制)时,裸机需手动管理状态机和事件队列,代码复杂度陡增,可维护性下降。此外,协作式任务调度依赖开发者自行实现,若任务间存在强依赖或资源竞争,容易引发逻辑漏洞或优先级反转问题。例如,智能家居中控需要同时处理蓝牙连接、触摸屏交互和云端同步,仅靠裸机开发会显著增加协调成本。

此时,实时操作系统(RTOS)的价值得以体现。RTOS提供任务调度、同步机制(如信号量、消息队列)和内存管理,能优雅处理多任务并行与资源竞争。例如,在无人机飞控系统中,RTOS可确保姿态计算、传感器融合和电机驱动等任务按优先级精确调度,避免手动调度导致的时序错乱。同时,RTOS的模块化设计提升了代码可复用性,适合大型团队协作开发。

尽管如此,多数嵌入式场景仍推荐裸机优先。据统计,超过70%的嵌入式应用(如智能门锁、温控器、小型传感器)仅需实现有限功能,裸机开发完全可满足需求。RTOS的引入意味着至少4-8KB的RAM/ROM开销及额外的CPU负载,对成本敏感的量产项目而言,这些资源本可用于提升功能或降低硬件规格。嵌入式开发的黄金法则是“用最少资源解决问题”——在满足实时性和功能需求的前提下,裸机不仅能降低BOM成本,还能减少系统潜在风险(如RTOS内核漏洞)。因此,除非面临多任务强实时、高复杂度或长期迭代需求,否则裸机仍是更优解

 

总结

​“如无必要,勿增实体”​ —— 裸机是嵌入式开发的第一性原理,能用裸机实现的功能,绝不上RTOS。复杂度留给代码,简单留给系统。

 


http://www.ppmy.cn/embedded/173196.html

相关文章

常见的死锁情况分析

死锁 定义: 是指多个进程或线程在执行过程中,由于竞争资源或因通信的需要而产生的相互等待的状态,使得它们无法继续执行下去(单线程中使用不恰当也会导致死锁问题)。 如下为常见的死锁原因: a. 互斥条件…

STM32U575RIT6单片机(一)

作业一:自己实现寄存器配置点亮LED1。 作业二:寄存器配置打开风扇,打开蜂鸣器。 //1、使能系统时钟 // 系统时钟初始化 - 不加入会报错 可以尝试一下 void SystemInit(void) {//对地址 0xE000ED88 的内容 进行修改://将0X3向左移动20位 或上…

2025-03-15 Python深度学习2——Numpy库

文章目录 1 基础1.1 数据类型1.1.1 整型数组与浮点型数组1.1.2 元素同化1.1.3 数组类型转换 1.2 数组维度1.2.1 一维数组与二维数组1.2.2 数组形状变换 2 创建数组2.1 创建指定数组2.2 创建递增数组2.3 创建同值数组2.4 创建随机数组 3 索引3.1 访问数组元素3.1.1 访问向量3.1.…

SOME/IP-SD -- 协议英文原文讲解8

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.4.4 S…

《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(40)翻天印压回文串 - 最长回文子序列(区间DP)

《灵珠觉醒:从零到算法金仙的C++修炼》卷三天劫试炼(40)翻天印压回文串 - 最长回文子序列(区间DP) 哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的回文森林,森林中有一本古老的翻天印,印身闪烁着神秘的光芒。森林的入口处有一块巨大的石碑,上面刻着…

作业9 (2023-05-05 数组的定义和初始化)

第1题/共11题【单选题】 关于一维数组初始化,下面哪个定义是错误的?( ) A.int arr[10] = {1,2,3,4,5,6}; B.int arr[] = {1,2,3,4,5,6}; C.int arr[] = (1,2,3,4,5,6); D.int arr[10] = {0}; A:正确,10个int的一段连续空间,前6个位置被初始化为1,2,3,4,5,6,其他…

《基于机器学习(xgboost)的人体卡路里消耗预测系统》开题报告

目录 1 选题的背景和意义 1.1 选题的背景 1.2 国内外研究现状及发展趋势 2 研究的基本内容 2.1 基本框架 2.1.1数据输入模块 2.1.2数据预处理模块 2.1.3特征工程模块 2.1.4模型训练与评估模块 2.1.5预测与输出模块 2.1.6用户界面(UI) 2.1.7系统维护与更新模块 2.…

MATLAB中envelope函数使用

目录 说明 示例 chirp 的解析包络 使用滤波器计算多通道信号的解析包络 录音信号的移动 RMS 包络 语音信号的峰值包络 不对称序列的包络 envelope函数的功能是提取信号的包络。 语法 [yupper,ylower] envelope(x) [yupper,ylower] envelope(x,fl,analytic) [yupper,…