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

为什么是裸机设计

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.rhkb.cn/news/33255.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言基础知识04

指针 指针概念 指针保存地址,地址是字节的编号 指针类型和保存的地址类型要一直 使用时注意,把地址转换为&变量的格式来看 int a[3]; a转为&a[0] 指针的大小 64bit 固定8字节, 32bit 固定4字节 指针…

IDEA 一键完成:打包 + 推送 + 部署docker镜像

1、本方案要解决场景? 想直接通过本地 IDEA 将最新的代码部署到远程服务器上。 2、本方案适用于什么样的项目? 项目是一个 Spring Boot 的 Java 项目。项目用 maven 进行管理。项目的运行基于 docker 容器(即项目将被打成 docker image&am…

浏览器崩溃的第一性原理:内存管理的艺术

作者:京东科技 屠永涛 登录后复制 你是否曾经遇到过浏览器突然卡顿,甚至崩溃的情况?尤其是在打开多个标签页或运行复杂的网页应用时,浏览器似乎变得异常脆弱。这种崩溃的背后,往往与内存管理息息相关。 1. 浏览器的内存…

Redis的缓存雪崩、缓存击穿、缓存穿透与缓存预热、缓存降级

一、缓存雪崩: 1、什么是缓存雪崩: 如果缓在某一个时刻出现大规模的key失效,那么就会导致大量的请求打在了数据库上面,导致数据库压力巨大,如果在高并发的情况下,可能瞬间就会导致数据库宕机。这时候如果…

算法刷题整理合集(一)

本篇博客旨在记录自已的算法刷题练习成长,里面注有详细的代码注释以及和个人的思路想法,希望可以给同道之人些许帮助。本人也是算法小白,水平有限,如果文章中有什么错误或遗漏之处,望各位可以在评论区指正出来&#xf…

ubuntu ollama+dify实践

安装ollama 官网的指令太慢了,使用以下指令加速: export OLLAMA_MIRROR"https://ghproxy.cn/https://github.com/ollama/ollama/releases/latest/download" curl -fsSL https://ollama.com/install.sh | sed "s|https://ollama.com/dow…

Cookie与Session详解

Cookie简介 Cookie 是浏览器提供的持久化存储数据的一种机制。是指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地终端上的数据(通常经过加密)。以下是关于 Cookie 的详细介绍: Cookie工作原理 当你访问一个网站时,该网…

Python Openpyxl给Excel增加条件规则

使用openpyxl添加条件格式是一个简单而直接的过程。在使用Excel文件时,条件格式对于数据趋势的可视化、突出显示关键数据点以及使数据更有意义和可理解非常有用。在本文中,我们将详细介绍如何使用openpyxl添加条件格式。 OpenPyxl中的条件格式简介 在进…

离线服务器ollama新增qwen2:0.5b模型

离线服务器ollama新增qwen2:0.5b模型 Dify集成ollama前面已经介绍过离线服务器CentOS使用的docker安装的ollama,其中在ollama中已经安装了deepseek-r1:1.5b。目前的需求是需要再安装一个qwen2:0.5b的模型,那么如何安装呢? 1.首先在有网的服…

零成本本地化搭建开源AI神器LocalAI支持CPU推理运行部署方案

文章目录 前言1. Docker部署2. 简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址 前言 嘿,小伙伴们!今天给大家带来一个超酷的黑科技——LocalAI。没错,你没听错,就是那个能在你的个人电脑上运行大型语言模…

数据类设计_图片类设计之4_规则类图形混合算法(前端架构)

前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇,讨论图片类型设计出来后在场景中如何表达,以及图片的混合算法.前面的内容属于铺垫和基础,这篇内容和实际联系起来了. 背景图和前景图 这里笔者想先…

Burpsuite使用笔记

Burpsuite使用笔记 抓包设置代理open Browserintercept on输入要抓包的网站回车ForwardHTTP history查看抓包数据其他浏览器配置burpsuite代理浏览器代理器插件配置打开代理同样步骤访问 原理三级目录 抓包 设置代理 open Browser 打开内置浏览器 intercept on 输入要抓包…

使用Dockerfile打包java项目生成镜像部署到Linux_java项目打docker镜像的dockerfile

比起容器、镜像来说,Dockerfile 非常普通,它就是一个纯文本,里面记录了一系列的构建指令,比如选择基础镜像、拷贝文件、运行脚本等等,每个指令都会生成一个 Layer,而 Docker 顺序执行这个文件里的所有步骤&…

移远通信联合德壹发布全球首款搭载端侧大模型的AI具身理疗机器人

在汹涌澎湃的人工智能浪潮中,具身智能正从实验室构想迈向现实应用。移远通信凭借突破性的端侧AI整体解决方案,为AI机器人强势赋能,助力其实现跨行业拓展,从工业制造到服务接待,再到医疗康养,不断改写各行业…

技术视界|构建理想仿真平台,加速机器人智能化落地

在近期的 OpenLoong 线下技术分享会 上,松应科技联合创始人张小波进行了精彩的演讲,深入探讨了仿真技术在机器人智能化发展中的关键作用。他结合行业趋势,剖析了现有仿真平台的挑战,并描绘了未来理想仿真系统的设计理念与实现路径…

JConsole 在 Linux 上的使用

JConsole 在 Linux 上的使用指南 1. 启动 JConsole 远程监控 Linux 服务器上的 JVM 进程 1.1 修改 JMX 配置&#xff0c;允许远程访问 在 Linux 服务器 启动 Java 应用时&#xff0c;需要加上 -Djava.rmi.server.hostname<服务器IP>&#xff0c;完整的启动参数如下&am…

【C#学习】协程等待

来源GPT&#xff0c;仅记录学习 yield return WaitForEndOfFrame() 适用于 渲染结束后再执行代码&#xff0c;但 WebGL 可能不适合这个操作&#xff0c;会拖慢帧率。(渲染得太慢&#xff09; yield return null; 让代码在下一帧的 Update() 里继续运行&#xff0c;更加流畅。 …

店匠科技携手 PayPal 升级支付体验,助力独立站商家实现全球增长

在全球化电商竞争加剧的背景下,独立站为无数商户插上了通向事业成功的翅膀。然而,搭建店铺框架容易,真正实现有效运营却充满挑战。只有当各个环节如齿轮般严丝合缝,独立站运营才能更好地助推行进,实现稳健增长。如今,独立站商家面临着全链路运营的多重挑战。从品牌塑造、营销推…

【算法】数组、链表、栈、队列、树

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 持续更新中...数组、链表点击消除环形链表环形链表 II 栈、队列树 持续更新中… 数组、链表 点击消除 AB5 点击消除 这个题很容…

机器学习实战——音乐流派分类(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 简介 音乐流派分类是音乐信息检索&#xff08;Music Information Retrieval, MIR&#xff09;中的一个重要任务&#xff0c;旨在…