[其他ST产品] 单片机开发中常用的三种软件架构

[复制链接]
2068|42
wwppd 发表于 2025-8-23 22:18 | 显示全部楼层 |阅读模式
嵌入式系统的软件架构是构建可靠嵌入式应用程序的关键。本文将探讨单片机开发中常用的三种软件架构:分层架构、事件驱动架构和服务导向架构。我们将深入了解每种架构的特点、适用场景以及附带示例代码,以便更好地理解它们的差异和优势。



分层架构



分层架构是一种将嵌入式系统分为多个层次的设计方法。每个层次具有明确定义的职责和功能,层与层之间通过接口通信,降低了耦合度。以下是分层架构的关键层次:

1、应用层:顶层,包含用户界面、应用逻辑和通信协议。这里处理与特定应用相关的功能。

2、中间件层:包括操作系统、驱动程序和文件系统。操作系统用于任务和资源管理,驱动程序用于与硬件通信,文件系统用于管理存储和文件操作。

3、HAL层(Hardware Abstraction Layer):包括与硬件交互的抽象层,通常使用单片机厂商提供的标准外设库或HAL库。

4、BSP层(Board Support Package):与硬件相关的初始化和配置,确保系统在目标硬件上正确运行。

分层架构的优势在于清晰的模块化和可维护性,适用于需要明确定义功能层次的项目。

分层架构示例代码

  1. // 应用层
  2. #include "app_led.h"


  3. int main(void) {
  4.     // 分层架构的应用层代码
  5.     APP_LED_Init();


  6.     while(1) {
  7.         APP_LED_Toggle();
  8.         HAL_Delay(1000);
  9.     }
  10. }


  事件驱动架构
事件驱动架构是一种基于事件响应的设计。每个模块可以注册并监听不同的事件,系统通过事件管理机制实现模块之间的通信和协作。以下是事件驱动架构的关键特点: 1、模块可以监听和响应特定事件,而不需要主循环的轮询。 2、通过事件注册和处理,系统可以更容易地添加新功能模块。 3、事件驱动架构通常需要一个事件管理系统,用于分发和处理事件。 事件驱动架构适用于需要快速响应外部事件或具有异步操作的系统,例如传感器数据采集和控制系统。 事件驱动架构示例代码:




  1. // 事件处理函数
  2. void EventHandler_LEDToggle(void) {
  3.     // 控制LED
  4.     HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
  5. }


  6. int main(void) {
  7.     // 事件注册
  8.     Event_RegisterHandler(Event_LED_Toggle, EventHandler_LEDToggle);


  9.     while(1) {
  10.         // 主循环
  11.         Event_Process();
  12.     }
  13. }



  1. int main(void) {
  2.     // 服务注册
  3.     Service_Register(Service_LED_Toggle);


  4.     while(1) {
  5.         // 调用服务
  6.         Service_LED_Toggle();
  7.         HAL_Delay(1000);
  8.     }
  9. }



总结



不同的软件架构适用于不同的嵌入式项目需求。分层架构适用于需要清晰划分功能层次的项目,事件驱动架构适用于需要快速响应外部事件的项目,而服务导向架构适用于需要模块化和可重用性的项目。选择适合你项目的架构可以提高代码质量、可维护性和可扩展性。
xiaoqizi 发表于 2025-9-3 08:52 | 显示全部楼层
将系统划分为多个层级,每层专注于特定功能模块,通过接口进行通信以降低耦合度
木木guainv 发表于 2025-9-3 11:13 | 显示全部楼层
分层架构模块化设计提升可维护性和移植性,适合复杂项目
Jiangxiaopi 发表于 2025-9-3 13:42 | 显示全部楼层
模块化设计将功能分解为独立模块(如UART通信、传感器读取),每个模块包含初始化函数和操作接口
荣陶陶 发表于 2025-9-3 16:03 | 显示全部楼层
消息传递系统通过消息队列、事件通知等方式实现模块间异步通信
Zhiniaocun 发表于 2025-9-3 18:22 | 显示全部楼层
消息传递系统解耦性强,支持动态任务分配,但需注意内存开销和阻塞风险

Zuocidian 发表于 2025-9-3 20:46 | 显示全部楼层
FreeRTOS、RT-Thread、µC/OS等。提供多任务调度、优先级管理、信号量/互斥锁等机制
Puchou 发表于 2025-9-4 07:58 | 显示全部楼层
实时操作系统抢占式调度确保紧急任务优先执行,配合中断可实现毫秒级响应
Xiashiqi 发表于 2025-9-4 10:30 | 显示全部楼层
有限状态机基于状态迁移图设计程序流程,适用于逻辑明确的控制场景
小海师 发表于 2025-9-4 12:53 | 显示全部楼层
分布式架构各节点运行相同或不同固件,通过协议协调任务分工。
Haizangwang 发表于 2025-9-4 15:28 | 显示全部楼层
时间片轮训法基于定时器中断周期性激活不同任务模块,通过标志位控制任务执行顺序
sesefadou 发表于 2025-9-9 10:50 | 显示全部楼层
无限循环模式              
tabmone 发表于 2025-9-9 11:50 | 显示全部楼层
RTOS               
tifmill 发表于 2025-9-9 13:33 | 显示全部楼层
将复杂任务分解为 “状态”,每个状态对应特定行为。
phoenixwhite 发表于 2025-9-9 14:23 | 显示全部楼层
将系统行为抽象为有限个状态,通过事件触发状态转移。
fengm 发表于 2025-9-9 15:46 | 显示全部楼层
将主循环划分为固定时间片,每个时间片执行一个任务。
hudi008 发表于 2025-9-9 17:50 | 显示全部楼层
按功能划分为 “硬件抽象层(HAL)- 驱动层 - 应用层” 等垂直层次。
claretttt 发表于 2025-9-10 10:25 | 显示全部楼层
事件驱动架构减少轮询,降低功耗。
eefas 发表于 2025-9-10 11:10 | 显示全部楼层
模块化设计              
macpherson 发表于 2025-9-10 16:02 | 显示全部楼层
分层架构              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

3098

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部