常用的三种软件架构

常用的三种软件架构:分层架构事件驱动架构服务导向架构

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

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

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

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

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

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

2、事件驱动架构是一种基于事件响应的设计。每个模块可以注册并监听不同的事件,系统通过事件管理机制实现模块之间的通信和协作。以下是事件驱动架构的关键特点:

1、模块可以监听和响应特定事件,而不需要主循环的轮询。

2、通过事件注册和处理,系统可以更容易地添加新功能模块。

3、事件驱动架构通常需要一个事件管理系统,用于分发和处理事件。

事件驱动架构适用于需要快速响应外部事件具有异步操作的系统,例如传感器数据采集和控制系统

事件驱动架构示例代码:

cpp 复制代码
// 事件处理函数
void EventHandler_LEDToggle(void) {
    // 控制LED
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
}


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


    while(1) {
        // 主循环
        Event_Process();
    }
}

3、服务导向架构将系统划分为多个服务,每个服务提供一组相关的功能。模块之间通过调用服务接口来进行通信和交互。以下是服务导向架构的主要特点:

1、每个服务负责一组明确定义的任务,模块通过调用服务接口来执行特定功能。

2、这种架构有助于模块之间的松耦合,提高了系统的可维护性和可重用性。

3、服务导向架构通常需要一个服务注册表,用于管理可用服务。

服务导向架构适用于 需要模块化高度可重用性的项目,例如通信协议栈或多功能嵌入式系统。

服务导向架构示例代码

cpp 复制代码
// 服务接口
void Service_LED_Toggle(void) {
    // 控制LED
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
}


int main(void) {
    // 服务注册
    Service_Register(Service_LED_Toggle);


    while(1) {
        // 调用服务
        Service_LED_Toggle();
        HAL_Delay(1000);
    }
}

总结

不同的软件架构适用于不同的嵌入式项目需求。分层架构适用于需要清晰划分功能层次的项目,事件驱动架构适用于需要快速响应外部事件的项目,而服务导向架构适用于需要模块化和可重用性的项目。选择适合你项目的架构可以提高代码质量、可维护性和可扩展性。

相关推荐
Qt程序员12 小时前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu
qeen8712 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
王老师青少年编程13 小时前
信奥赛C++提高组csp-s之搜索进阶(记忆化搜索案例实践3)
c++·记忆化搜索·方格取数·csp·信奥赛·csp-s·提高组
Titan202414 小时前
Linux动静态库
linux·服务器·c++
j_xxx404_14 小时前
MySQL表操作硬核解析:从 CREATE TABLE 到磁盘文件、ALTER TABLE 与 DDL 风险
运维·服务器·数据库·c++·mysql·adb·ai
wuminyu15 小时前
Java锁机制之park和unpark源码剖析
java·linux·c语言·jvm·c++
玖玥拾15 小时前
C/C++ 基础笔记(十一)类的进阶
c语言·c++·设计模式·
-森屿安年-16 小时前
1137. 第 N 个泰波那契数
c++·动态规划
程序员老舅16 小时前
从内核视角,看Linux文件读写过程
linux·服务器·c++·内核·linux内核·vfs·linux内存
Soari17 小时前
llama.cpp更新(b9553):LLM inference in C/C++,本地和云端实现高性能大模型推理
c语言·c++·llama