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

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

嵌入式系统的软件结构

嵌入式系统的软件结构一般分为 不带操作系统(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();  // 初始化 MCU
    GPIO_Init(); // 初始化 GPIO
    while (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);
    }
}	

嵌入式系统的硬件和软件特点决定了它的高效、低功耗、实时性和可靠性,硬件:小型化、低功耗、面向特定应用;软件:高效、实时、代码固化、多任务管理。在开发中需要合理应用与设计硬件和软件。

以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!


http://www.kler.cn/a/573180.html

相关文章:

  • ios使用swift调用deepseek或SiliconFlow接口
  • 网络编程——UDP
  • Java 8 新特性
  • PCA(主成分分析)核心原理
  • Git 2.48.1 官方安装与配置全流程指南(Windows平台)
  • Libgdx游戏开发系列教程(6)——游戏暂停
  • 人工智能直通车系列02【Python 基础与数学基础】(控制流线性代数:向量基本概念)
  • 基于SpringBoot的在线骑行网站的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • SpringMvc与Struts2
  • Switch开关的防抖监听器
  • libcoap在Ubuntu下的编译(基于CMake)
  • Kafka、RabbitMQ、RocketMQ的区别
  • vscode user settings.json分享
  • 数据守护:备份文件的重要性及自动化实践
  • Linux磁盘情况查询
  • Linux下的shell指令(一)
  • Linux基础IO
  • vLLM代码推理Qwen2-VL多模态大模型(远程服务器解决方案,无需UI)
  • 国内支持Stable Diffusion模型的平台
  • ASP .NET Core 学习(.NET9)Serilog日志整合