当前位置: 首页 > news >正文

【单片机】嵌入式系统的硬件与软件特性

嵌入式系统的软件结构

嵌入式系统的软件结构一般分为 不带操作系统(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&#xff0c;通过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日&#xff0c;从南京市投资促进局传来振奋人心的消息&#xff0c;南京江北新区的一家高科技企业——南京南智先进光电集成技术研究院有限公司&#xff08;简称“南智光电”&#xff09;&#xff0c;携手南京知满科技等合作伙伴&#xff0c;成功研发出国内首个光子AI智能引…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 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&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;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&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...