【单片机】嵌入式系统的硬件与软件特性
嵌入式系统的软件结构
嵌入式系统的软件结构一般分为 不带操作系统(Bare Metal) 和 带操作系统(RTOS / Linux) 两种。不同的软件架构适用于不同的应用场景,如 简单控制系统、实时控制系统、物联网、工业自动化等。

嵌入式软件结构可以分为不带 OS(裸机)和带 OS(RTOS / Linux)两种,裸机系统适用于简单任务,代码直接运行在 MCU 上,RTOS 适用于多任务管理,提高系统稳定性和可扩展性。
1. 不带 OS 的嵌入式软件结构(Bare Metal)
概述:不带操作系统的软件架构通常应用于 单片机(MCU),运行简单的任务,程序直接控制硬件。如 Arduino、STM32(无 RTOS)、AVR、8051、PIC 等。
软件结构:
+------------------+
| 应用程序 | 用户编写的功能代码
| Application |
+------------------+
| 设备驱动 | 控制外设,如 GPIO、UART、SPI
| Driver |
+------------------+
| 硬件(MCU) | 处理器、存储器、外设
+------------------+
特点:1. 程序直接运行在硬件上,没有操作系统的调度;2. 代码简单,执行效率高; 3. 适用于小型嵌入式设备(如 8-bit、32-bit MCU); 4. 缺乏多任务管理,任务间靠循环或中断实现。
应用场景:
📌 传感器采集
📌 LED 控制、电机驱动
📌 简单串口通讯(UART、I2C、SPI)
📌 低功耗 IoT 设备(如无线传感器节点)
示例代码(裸机 LED 闪烁 - STM32):
int main(void) {HAL_Init(); // 初始化 MCUGPIO_Init(); // 初始化 GPIOwhile (1) {HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);HAL_Delay(500); // 延时 500ms}
}
2. 带 OS 的嵌入式软件结构(RTOS / Linux)
概述:带操作系统的软件架构通常用于 复杂的嵌入式系统(MPU / 高级 MCU),需要多任务处理、实时性、网络通信等功能。
常见的操作系统包括:
- RTOS(实时操作系统):FreeRTOS、RT-Thread、Zephyr
- 嵌入式 Linux:Yocto、Buildroot、Ubuntu Core
软件结构:
+------------------------+
| 应用程序 (Application) | 用户应用,业务逻辑、UI、通信协议
+------------------------+
| 标准 API 层 (API) | 提供标准接口,如 POSIX、CMSIS-RTOS
+------------------------+
| 实时操作系统 (RTOS) | 任务调度、线程管理、定时器
+------------------------+
| 硬件抽象层 (HAL) | 提供硬件驱动接口,如 STM32 HAL
| BSP(Board Support) | 板级支持包,适配不同硬件平台
+------------------------+
| 硬件 (MCU/MPU) | 处理器、存储器、外设
+------------------------+
特点:1. 支持多任务调度(如 FreeRTOS 任务管理);2. 提高系统稳定性(任务隔离,防止崩溃) 3. 适用于复杂嵌入式应用(如 TCP/IP、USB、GUI) 4. 功耗管理更精细。
应用场景:
📌 物联网设备(无线通信、MQTT)
📌 车载系统(仪表盘、导航)
📌 工业控制(PLC、机器人)
📌 智能家居(智能音箱、网关)
示例代码(FreeRTOS 任务调度 - STM32):
void Task1(void *pvParameters) {while (1) {HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);vTaskDelay(pdMS_TO_TICKS(500)); // 任务延时 500ms}
}
int main(void) {HAL_Init();xTaskCreate(Task1, "LED_Task", 128, NULL, 1, NULL);vTaskStartScheduler(); // 启动 FreeRTOS
}
不带 OS vs 带 OS 的对比
| 对比项 | 不带 OS(Bare Metal) | 带 OS(RTOS / Linux) |
|---|---|---|
| 任务管理 | 通过循环或中断 | 任务调度(多线程) |
| 实时性 | 高 | 取决于 RTOS 设计 |
| 复杂度 | 代码简单 | 需要 RTOS 框架 |
| 功耗管理 | 低功耗,适合小 MCU | 需要 OS 支持 |
| 应用场景 | 传感器、LED 控制 | 物联网、工业控制 |
如果系统简单(如 LED 控制、UART 通信) → 使用 Bare Metal
如果需要多任务调度、网络功能(如 MQTT) → 使用 RTOS
如果系统复杂(如 Linux + GUI + 网络) → 使用嵌入式 Linux
嵌入式系统的硬件特性
硬件
1. 体积小、集成效率高嵌入式设备通常体积小,适用于便携式或嵌入式环境高度集成的 SoC(System on Chip)减少 PCB 设计复杂度部分系统采用 SIP(System in Package)进一步缩小体积部分应用:智能手表(Apple Watch, 华为手表)物联网传感器(无线温湿度检测)无人机控制芯片2. 面向特定的应用嵌入式系统为特定任务设计,如工业控制、汽车电子、医疗设备硬件定制化程度高,优化 CPU、存储、通信接口不需要通用计算能力,而是专注于某项功能部分应用:车载 ECU(发动机控制单元)智能家居(智能门锁、摄像头)工业 PLC(可编程逻辑控制器)3. 功耗低、电磁兼容性(EMC)好嵌入式设备通常采用低功耗架构(如 ARM Cortex-M 系列)支持低功耗模式(Sleep, Deep Sleep),延长电池续航优化 PCB 布局,减少 EMI(电磁干扰)和 EMC(电磁兼容)问题部分应用:低功耗 IoT 设备(ESP32, STM32L 系列)医疗植入设备(心脏起搏器)无线通信模块(LoRa, Zigbee)
嵌入式系统的软件特性
1. 软件开发与硬件紧密相关嵌入式软件依赖于具体硬件,通常需要驱动开发不同的 MCU / MPU 需要不同的 BSP(Board Support Package)与低级硬件交互,如 GPIO、UART、I2C、SPI示例:STM32 配置 GPIO
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); // 设置引脚高电平
2. 代码要求高效率和高可靠性嵌入式系统资源有限(RAM / Flash 小),代码需优化通常需要实时性,避免延迟和死机使用 RTOS(如 FreeRTOS)实现任务调度,提高代码可靠性示例:FreeRTOS 任务调度:
void Task1(void *pvParameters) {while (1) {HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);vTaskDelay(pdMS_TO_TICKS(500)); // 500ms 延时}
}
3. 软件一般固化在 Flash 或 ROM嵌入式程序存储在 Flash / ROM,而非硬盘部分设备支持 OTA(Over-the-Air)更新固件升级需谨慎,避免损坏 Bootloader示例:STM32 Flash 读取
uint32_t data = *(__IO uint32_t*)FLASH_ADDRESS; // 读取 Flash 数据
4. 具有高实时性嵌入式系统通常需要实时响应,如汽车刹车系统、工业控制使用 RTOS(实时操作系统)或裸机(Bare Metal)提高实时性定时器(Timer)、中断(Interrupt)在嵌入式系统中至关重要示例:STM32 定时器中断
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {if (htim->Instance == TIM2) {HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0); // 定时器触发 LED 闪烁}
}
5. 一般采用 C 语言开发C 语言是嵌入式开发的主要语言,因其高效、可移植性强部分系统使用 C++(如 Qt GUI)、Python(如 MicroPython)汇编用于极限优化(如 Bootloader、DSP 算法)示例:STM32 C 代码
#include "stm32f4xx.h"
int main(void) {HAL_Init();while (1) {HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);HAL_Delay(500);}
}
嵌入式系统的硬件和软件特点决定了它的高效、低功耗、实时性和可靠性,硬件:小型化、低功耗、面向特定应用;软件:高效、实时、代码固化、多任务管理。在开发中需要合理应用与设计硬件和软件。
以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。
我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!
相关文章:
【单片机】嵌入式系统的硬件与软件特性
嵌入式系统的软件结构 嵌入式系统的软件结构一般分为 不带操作系统(Bare Metal) 和 带操作系统(RTOS / Linux) 两种。不同的软件架构适用于不同的应用场景,如 简单控制系统、实时控制系统、物联网、工业自动化等。 嵌…...
C语言学习笔记-初阶(30)深入理解指针2
1. 数组名的理解 在上一个章节我们在使用指针访问数组的内容时,有这样的代码: int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0]; 这里我们使用 &arr[0] 的方式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址&…...
ROM修改进阶教程------修改安卓机型SELinux宽容的几种方式方法 以及第三方系统中如何关闭SELinux宽容
SELinux是一种强制访问控制安全机制,用于增强Linux系统的安全性。在某些情况下,可能需要对 SELinux 进行宽容设置,以满足特定的应用需求。当SELinux处于宽容模式时,系统允许违反安全策略的行为发生,但不会阻止这些行为,通常会在日志中记录这些违规事件。这与强制模式不同…...
亚马逊云科技Marketplace(中国区)上架专业服务产品, “云生态连接器”价值凸显
近日,由西云数据运营的亚马逊云科技Marketplace(中国区)正式支持专业服务产品。此次发布将大幅简化企业对云专业服务的采购流程,实现云软件从规划、部署到支持的全生命周期管理,同时也为合作伙伴提供了更多的销售机会。…...
【音视频】音频基础
一、音频基础 1.1 声音的物理性质 ——振动 声音是一种由物体振动引发的物理现象,如小提琴的弦声等。物体的振动使其四周空气的压强产生变化,这种忽强忽弱变化以波的形式向四周传播,当被人耳所接收时,我们就听见了声音。 1.2 声…...
策略模式的C++实现示例
核心思想 策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装在独立的类中,使得它们可以互相替换。策略模式让算法的变化独立于使用它的客户端,从而使得客户端可以根据需要动态切换算法,而不需要修改…...
本地部署pangolin获取谱系,从而达到预测新冠的流行趋势
步骤 1:安装Docker 注:此步骤忽略,可通过Docker官网对于文档进行安装,地址如下 Docker: Accelerated Container Application Developmenthttps://www.docker.com/ 步骤 2:拉取Pangolin镜像 docker pull staphb/pangolin:latest 步…...
【我的 PWN 学习手札】House of Emma
House of Emma 参考文献 第七届“湖湘杯” House _OF _Emma | 设计思路与解析-安全KER - 安全资讯平台 文章 - house of emma 心得体会 - 先知社区 前一篇博客【我的 PWN 学习手札】House of Kiwi-CSDN博客的利用手法有两个关键点,其一是利用__malloc_assert进入…...
4 Redis4 List命令类型讲解
Redis 列表(List)命令详解 1. Redis 列表(List)简介 Redis 列表(List)是一个简单的字符串列表,按照插入顺序排序。它可以用作 栈(Stack) 和 队列(Queue&…...
CentOS 7 安装 Redis6.2.6
获取资源、下载安装 Redis6.2.6 安装Redis6.2.6 上传到服务器或直接下载(wget http://download.redis.io/releases/redis-6.2.6.tar.gz)、再解压安装 tar -zxvf redis-6.2.6.tar.gz 进入redis解压目录 cd redis-6.2.6先编译 make再执行安装 make PREFI…...
数据库原理4
1.数据库中的数据通常可分为用户数据和系统数据两部分。用户数据是用户使用的数据;系统数据称为数据字典。 2.SQL语言的功能:数据查询;数据操纵;数据定义;数据操作;数据控制 3.对未提交更新的依赖&#x…...
doris: MySQL
Doris JDBC Catalog 支持通过标准 JDBC 接口连接 MySQL 数据库。本文档介绍如何配置 MySQL 数据库连接。 使用须知 要连接到 MySQL 数据库,您需要 MySQL 5.7, 8.0 或更高版本 MySQL 数据库的 JDBC 驱动程序,您可以从 Maven 仓库下载最新或指定版本的…...
Django模型数据删除:详解两种方式
Django模型数据删除:详解两种方式 在Django框架中,数据模型(Model)不仅定义了应用的数据结构,还提供了与数据库交互的接口,包括数据的删除操作。本文将详细介绍两种在Django中删除数据的方式:通…...
C++并发以及多线程的秘密
1.基础概念 并发(Concurrency) 并发是指在同一时间段内,多个任务看起来像是同时执行的。并发并不一定意味着真正的同时执行,它可以是通过时间片轮转等方式在多个任务之间快速切换,让用户感觉多个任务在同时进行。并发…...
自学微信小程序的第十二天
DAY12 1、腾讯地图SDK是一套为开发者提供多种地理位置服务的工具,可以使开发者在自己的应用中加入地图相关功能,轻松访问腾讯地图服务和数据,更好地实现微信小程序的地图功能。 表49:search()方法的常用选项 选项 类型 说明 keyword string POI搜索关键词,默认周边搜索 l…...
⭐算法OJ⭐跳跃游戏【贪心算法】(C++实现)Jump Game 系列 I,II
既股票买卖系列之后的第二组贪心算法题目:跳跃游戏系列。这一篇介绍的两个问题,其输入均为一个数组,每个元素表示在该位置可以跳跃的最大长度。 55. Jump Game You are given an integer array nums. You are initially positioned at the …...
带你从入门到精通——自然语言处理(五. Transformer中的自注意力机制和输入部分)
建议先阅读我之前的博客,掌握一定的自然语言处理前置知识后再阅读本文,链接如下: 带你从入门到精通——自然语言处理(一. 文本的基本预处理方法和张量表示)-CSDN博客 带你从入门到精通——自然语言处理(二…...
ubuntu挂载固态硬盘
Ubuntu 中挂载位于 /dev/sdc1 的固态硬盘,可以按照以下步骤操作: 步骤 1:确认分区信息 首先,确保设备 /dev/sdc1 存在且已正确分区: sudo fdisk -l /dev/sdc # 查看分区表 lsblk # 确认分区路…...
WPF+WebView 基础
1、基于.NET8,通过NuGet添加Microsoft.Web.WebView2。 2、MainWindow.xaml代码如下。 <Window x:Class"Demo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/win…...
国内光子AI智能引擎:OptoChat AI在南京江北新区亮相
3月3日,从南京市投资促进局传来振奋人心的消息,南京江北新区的一家高科技企业——南京南智先进光电集成技术研究院有限公司(简称“南智光电”),携手南京知满科技等合作伙伴,成功研发出国内首个光子AI智能引…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
