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

架构对比分析

您提到的两种架构描述本质上遵循相同的分层设计理念,但存在差异的原因在于 视角不同硬件平台特性。以下是详细解析:


一、架构对比分析

1. 逻辑分层(通用软件设计视角)
应用层(UI/用户交互)↓
业务逻辑层(平衡算法/文件管理)↓
驱动层(传感器采集/硬件控制)
  • 特点
    • 功能导向:按软件功能模块划分,与硬件无关
    • 通用性:适用于任何硬件平台(如PC/嵌入式/手机)
    • 典型应用:传统单核设备(如STM32F4系列)
2. 物理分层(STM32MP157异构平台视角)
+---------------------+
|     Qt应用层         |  
+---------------------+
|   Linux服务层        | 
+---------------------+
|  FreeRTOS实时层      | 
+---------------------+
| 硬件抽象层(HAL)     | 
+---------------------+
  • 特点
    • 硬件耦合:紧密结合双核异构架构(A7+M4)
    • 实时性优化:明确区分实时任务(M4)与非实时任务(A7)
    • 典型应用:需要硬实时+复杂UI的场景(如工业HMI)

二、分层差异的原因

1. 多出的"Linux服务层"与"FreeRTOS实时层"
  • 硬件差异

    • STM32MP157 的双核特性要求明确划分操作系统层级:
      • Linux层:管理UI、网络、文件系统等非实时任务
      • FreeRTOS层:处理ADC采样、电机控制等实时任务
    • 单核芯片(如i.MX6ULL):无需此分层,所有任务在单一OS中运行
  • 功能必要性

    非实时请求
    跨核通信
    硬件驱动
    Qt应用层
    Linux服务层
    FreeRTOS实时层
    HAL层
2. 硬件抽象层(HAL)的定位
  • 在传统分层中:HAL属于"驱动层"的一部分
  • 在异构分层中:HAL作为独立层,屏蔽双核差异:
    // HAL接口示例(统一A7/M4访问)
    typedef struct {int (*read_sensor)(void);      // M4实现void (*set_led)(int state);    // A7实现
    } HAL_Operations;
    

三、非STM32MP157平台的架构调整

1. 使用纯Linux平台(如i.MX6ULL)
应用层(Qt)↓
业务逻辑层(算法+文件)↓
Linux内核层(驱动+实时补丁)↓
硬件层(传感器/屏幕)
  • 关键调整
    • 移除FreeRTOS层,实时任务通过 Linux PREEMPT_RT 补丁实现
    • 示例配置:
      # 内核配置
      CONFIG_PREEMPT_RT_FULL=y
      CONFIG_HIGH_RES_TIMERS=y
      
2. 使用低端MCU(如STM32F4)
应用层(裸机UI)↓
业务逻辑层(简化算法)↓
驱动层(HAL库)
  • 典型方案
    • UI使用嵌入式GUI(如TouchGFX/LVGL)
    • 文件系统使用FatFS
    • 实时性由中断保障
3. 不同硬件平台的架构映射表
硬件平台对应架构分层实时性保障方案
STM32MP157(双核)Qt应用 + Linux服务 + FreeRTOS实时 + HALM4核硬实时
i.MX6ULL(单核)Qt应用 + Linux内核(RT补丁) + HAL软实时(PREEMPT_RT)
STM32F4(单核)裸机应用 + 驱动层中断优先级控制

四、架构设计建议

1. 通用设计原则
  • 模块化隔离

    // 业务逻辑层接口(硬件无关)
    class BalanceAlgorithm {
    public:virtual double calculate(QVector<double> samples) = 0;
    };// 平台相关实现
    class STM32MP157Balance : public BalanceAlgorithm { /*M4核实现*/ };
    class LinuxRTBalance : public BalanceAlgorithm { /*PREEMPT_RT实现*/ };
    
  • 跨平台HAL设计

    // hal.h
    #if defined(STM32MP157)#include "hal_stm32mp157.h"
    #elif defined(IMX6ULL)#include "hal_imx6ull.h"
    #endif
    
2. 选择依据
考量因素推荐架构原因
需要硬实时(<10μs)STM32MP157异构分层M4核专用于实时任务
成本敏感i.MX6ULL单核Linux架构省去M4核开发成本
界面复杂度低STM32F4裸机架构减少OS开销

五、示例:i.MX6ULL单核方案实现

1. 软件架构
应用层(Qt Quick)↓
业务逻辑层(平衡算法 + 模板管理)↓
Linux内核层(带PREEMPT_RT补丁)↓
驱动层(SPI/I2C/ADC驱动)
2. 实时数据采集实现
// 内核模块(确保实时性)
static irq_handler_t adc_isr(int irq, void *dev) {struct adc_sample *sample = kmalloc(sizeof(*sample), GFP_ATOMIC);sample->value = read_adc();kfifo_put(&adc_fifo, sample); // 无锁环形缓冲区return IRQ_HANDLED;
}// 用户空间线程(设置实时优先级)
void *data_thread(void *arg) {struct sched_param param = { .sched_priority = 99 };pthread_setschedparam(pthread_self(), SCHED_FIFO, &param);while(1) {struct adc_sample sample;if(kfifo_get(&adc_fifo, &sample)) {process_sample(sample.value);}}
}

结论

两种架构描述本质上是 同一设计思想在不同硬件场景下的具体表现。是否添加额外的分层(如Linux/FreeRTOS层),取决于:

  1. 硬件是否异构(是否需要区分实时核与非实时核)
  2. 实时性要求级别(硬实时需独立RTOS,软实时可用Linux补丁)
  3. 系统复杂度(简单设备可合并业务逻辑与驱动层)

建议根据最终硬件选型,参考以下决策树:

需要硬实时?
选择STM32MP157异构架构
界面复杂度高?
选择i.MX6ULL单核Linux
选择STM32F4裸机方案

相关文章:

架构对比分析

您提到的两种架构描述本质上遵循相同的分层设计理念&#xff0c;但存在差异的原因在于 视角不同 和 硬件平台特性。以下是详细解析&#xff1a; 一、架构对比分析 1. 逻辑分层&#xff08;通用软件设计视角&#xff09; 应用层&#xff08;UI/用户交互&#xff09;↓ 业务逻辑…...

【每日八股】Redis篇(二):数据结构

Redis 数据类型&#xff1f; 主要有 STRING、LIST、ZSET、SET 和 HASH。 STRING String 类型底层的数据结构实现主要是 SDS&#xff08;简单动态字符串&#xff09;&#xff0c;其主要应用场景包括&#xff1a; 缓存对象&#xff1a;可以用 STRING 缓存整个对象的 JSON&…...

windows使用命令解压jar包,替换里面的文件。并重新打包成jar包,解决Failed to get nested archive for entry

有一个jar包&#xff0c;需要替换里面的文件&#xff0c;使用解压工具打开项目&#xff0c;然后找到对应的子包&#xff0c;再次打开&#xff0c;然后进行手工替换重新压缩成jar包后&#xff0c;发现启动服务报错Failed to get nested archive for entry。 使用下面的命令可实…...

2025电商与跨境贸易实战全解析:DeepSeek赋能细分领域深度指南(附全流程案例)

🚀 2025电商与跨境贸易实战全解析:DeepSeek赋能细分领域深度指南(附全流程案例)🚀 📚 目录 DeepSeek在电商与跨境贸易中的核心价值选品与市场分析:AI驱动的精准决策Listing优化与多语言营销:提升转化率的秘密物流与供应链管理:AI赋能的效率革命客户服务与私域运营:…...

驱动开发系列39 - Linux Graphics 3D 绘制流程(二)- 设置渲染管线

一:概述 Intel 的 Iris 驱动是 Mesa 中的 Gallium 驱动,主要用于 Intel Gen8+ GPU(Broadwell 及更新架构)。它负责与 i915 内核 DRM 驱动交互,并通过 Vulkan(ANV)、OpenGL(Iris Gallium)、或 OpenCL(Clover)来提供 3D 加速。在 Iris 驱动中,GPU Pipeline 设置 涉及…...

自动驾驶中planning为什么要把横纵向分开优化?

在自动驾驶系统中&#xff0c;将 横向&#xff08;Lateral&#xff09;规划 和 纵向&#xff08;Longitudinal&#xff09;规划 分开优化是一种常见的设计范式&#xff0c;其核心原理在于 解耦车辆运动控制的多维复杂性&#xff0c;同时兼顾 计算效率 和 安全性约束。以下从原理…...

Linux 命令大全完整版(06)

2. 系统设置命令 pwunconv 功能说明&#xff1a;关闭用户的投影密码。语法&#xff1a;pwunconv补充说明&#xff1a;执行 pwunconv 指令可以关闭用户投影密码&#xff0c;它会把密码从 shadow 文件内&#xff0c;重回存到 passwd 文件里。 rdate(receive date) 功能说明&a…...

第9章:LangChain结构化输出-示例2(数字提取服务)

如何使用LangChain4j框架创建和使用多种AI服务。它通过定义接口和注解&#xff0c;将自然语言处理任务&#xff08;如情感分析、数字提取、日期提取、POJO提取等&#xff09;封装为服务&#xff0c;并通过LangChain4j的AiServices动态生成这些服务的实现。 本章主要讲述基于Lan…...

每天五分钟深度学习pytorch:使用Inception模块搭建GoogLeNet模型

本文重点 前面我们学习了Incetption模块,它的作用类似于vgg块对于VGG网络模型一样,本文我们使用Inception搭建GoogLeNet网络,如果使用卷积层开始从头开始搭建GoogleNet,那么这样看起来会很不清晰,我们使用已经封装好的Inception来搭建GoogLeNet网络 关键点 关键点在于I…...

Ubuntu - Redis 安装、远程访问

参考教程&#xff1a; https://blog.csdn.net/houor/article/details/126672577 https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/ 查看是否安装 redis-cli --versionUbuntu 上安装 更新&#xff1a; sudo apt update …...

SpringBoot+Vue+微信小程序的猫咖小程序平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在当下这个高速发展的时代&#xff0c;网络科技正以令人惊叹的速度不断迭代更新。从 5G …...

二分查找算法的全面解析C++

一、核心原理与特性 二分查找是一种**对数时间复杂度(O(log n))**的高效搜索算法46&#xff0c;需满足两个前提条件&#xff1a; 数据存储在连续内存空间&#xff08;如数组&#xff09;数据按升序/降序有序排列35 算法通过折半比较缩小搜索范围&#xff1a; 初始化左右边界…...

深度学习(5)-卷积神经网络

我们将深入理解卷积神经网络的原理&#xff0c;以及它为什么在计算机视觉任务上如此成功。我们先来看一个简单的卷积神经网络示例&#xff0c;它用干对 MNIST数字进行分类。这个任务在第2章用密集连接网络做过&#xff0c;当时的测试精度约为 97.8%。虽然这个卷积神经网络很简单…...

第9章:LangChain结构化输出-示例3(日期和时间提取服务)

如何使用LangChain4j框架创建和使用多种AI服务。它通过定义接口和注解,将自然语言处理任务(如情感分析、数字提取、日期提取、POJO提取等)封装为服务,并通过LangChain4j的AiServices动态生成这些服务的实现。 本章主要讲述基于LangChain调用大模型如何进行结构化输出的真实…...

解决Open WebU无法显示基于OpenAI API接口的推理内容的问题

解决方案 把reasoning content的东西移到content中来 并在reasoning时&#xff0c;手动加上标签。具体做法是截获第三方api返回的stream&#xff0c;并修改其中的内容&#xff0c;再移交给open webUI处理。 在backend\open_webui\routers\openai.py中 找到 generate_chat_com…...

AI颠覆蛋白质工程:ProMEP零样本预测突变效应

概述 在生命科学的“造物革命”中&#xff0c;蛋白质工程一直面临着“试错成本”与“设计效率”的双重挑战——传统方法依赖繁复的多序列比对&#xff08;MSA&#xff09;或耗时的实验室筛选&#xff0c;如同在浩瀚的蛋白质宇宙中盲选星辰。而今日&#xff0c;一项发表于《Cel…...

QT闲记-状态栏,模态对话框,非模态对话框

1、创建状态栏 跟菜单栏一样,如果是继承于QMainWindow类,那么可以获取窗口的状态栏,否则就要创建一个状态栏。通过statusBar()获取窗口的状态栏。 2、添加组件 通常添加Label 来显示相关信息,当然也可以添加其他的组件。通过addWidget()添加组件 3、设置状态栏样式 …...

QQ登录测试用例报告

QQ登录测试用例思维导图 一、安全性测试用例 1. 加密传输与存储验证 测试场景&#xff1a;输入账号密码并提交登录请求。预期结果&#xff1a;账号密码通过加密传输&#xff08;如HTTPS&#xff09;与存储&#xff08;如哈希加盐&#xff09;&#xff0c;无明文暴露。 2. 二…...

ipad连接电脑断断续续,不断弹窗的解决办法

因为ipad air 屏幕摔坏&#xff0c;换了一个内外屏&#xff0c;想用爱思检验一下屏幕真伪&#xff0c; 连接电脑时&#xff0c;断断续续&#xff0c;连上几秒钟然后就断开&#xff0c;然后又连上 然后又断开&#xff0c;不断地弹出信任的弹窗。 刚开始以为是数据线问题&#x…...

《FFTformer:基于频域的高效Transformer用于高质量图像去模糊》

paper&#xff1a;2211.12250 GitHub&#xff1a;kkkls/FFTformer: [CVPR 2023] Effcient Frequence Domain-based Transformer for High-Quality Image Deblurring CVPR 2023 目录 摘要 1、介绍 2、相关工作 2.1 基于深度CNN的图像去模糊方法 2.2 Transformer及其在图…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...