嵌入式项目代码架构与分层

embedded/2025/3/18 14:54:14/

代码架构与分层

  • BSP:板级支持驱动程

BSP: Board Support Package

MCU和板上外设器件(比如MPU6050)的通信与交互过程。

有时候分两种:

1.在裸机(有限状态机)情况下,写的驱动程序;

2.在操作系统下,写驱动程序。

  • Core:MCU驱动程序

面向MCU进行编程,初始化MCU内部的外设(时钟,IIC,SPI等外设)。包含main.c文件。

  • Drivers:厂商SDK程序

MCU厂商和MCU内的CPU厂商提供的,用来对CPU和偏上外设编程时用的驱动库,一般由厂家提供。

  • Middlewares:中间件

抽象程度很高,能在各个项目中安插通用的:LVGL\数学库\快速傅里叶变换库

  • OS:操作系统层

操作系统层。FreeRTOS

  • SYSTEM:系统配置层

对系统定义整体的宏;

对于全局系统有影响的参数,和文件(比如System.h),放在这个目录下;

  • 业务层:

结合业务实现具体地应用逻辑,这一层一般是一个个xxx_task.c/.h文件存放的位置;

在设计每层的代码时,一定避免跨层进行操作。原因如下:

  1. 跨层执行会影响代码分层解耦,修改其中一层代码,为了功能能实现必须跨层修改代码,会导致逻辑不清晰,

架构混乱,没有实现解耦。

  1. 下层某些操作可能在中断中执行,部分中断RTOS无法管理,会造成数据溢出、数据完整性缺失、影响其他硬件

工作、RTOS中的任务无法执行等问题。

  1. 可能会产生线程安全的问题,比如APP线程可能会向驱动线程传递阻塞的回调函数,造成驱动线程被阻塞,从而导致其他消费者线程的任务执行被Delay。

为什么需要在APP与BSP之间通过OS层传递数据


http://www.ppmy.cn/embedded/173621.html

相关文章

解决QT_Debug 调试信息不输出问题

方式1 &#xff1a;手动通过添加环境变量解决 ->使用命令&#xff1a; QT_LOGGING_TO_CONSOLE1 qtcreator启动 ->如若还未输出qDebug调试信息 则在程序中引<QLoggingCategory>包 #include <QLoggingCategory> ->在程序入口添加 QLoggingCategory::defa…

本地部署deepseek-r1建立向量知识库和知识库检索实践【代码】

目录 一、本地部署DS 二、建立本地知识库 1.安装python和必要的库 2.设置主目录工作区 3.编写文档解析脚本 4.构建向量数据库 三、基于DS,使用本地知识库检索 本地部署DS,其实非常简单,我写了一篇操作记录,我终于本地部署了DeepSeek-R1(图文全过程)-CSDN博客 安装…

(性能测试)性能测试工具 2.jmeter的环境搭建 3jmeter元件和4使用实例 5jmeter元件和参数化

目录 性能测试工具 性能测试工具 jemeter环境搭建 jmeter的常用目录介绍 jmeter修改语言和主题--jmeter界面的汉化 jmeter元件 jmeter元件和组件的介绍 jmeter的作用域原则 jmeter的执行顺序 案例&#xff1a;执行顺序 jmeter使用案例 jmeter线程组的介绍 jmeter…

365天之第P10周:Pytorch实现车牌识别

365天之第P10周&#xff1a;Pytorch实现车牌识别 Pytorch实现车牌识别 365天之第P10周&#xff1a;Pytorch实现车牌识别一、导入数据1.获取类别名2. 数据可视化3. 标签数字化4. 加载数据文件5. 划分数据 二、自建模型三、 训练模型1. 优化器与损失函数2. 模型训练 四、 结果分析…

深入理解 C++20 中的 `std::shared_ptr` 原子操作

文章目录 1. std::shared_ptr 的线程安全问题2. std::shared_ptr 原子操作函数2.1 原子读取和存储2.2 原子交换2.3 原子比较交换 3. 注意事项4. 示例5. 总结 在多线程编程中&#xff0c;线程安全是一个至关重要的问题。C11 引入了 std::shared_ptr&#xff0c;它通过引用计数机…

【VS小知识】VS如何保存UTF8

之前由于用C#开发服务器&#xff0c;无意间发现VS保存的.cs文件不是UTF8编码的&#xff0c;虽然文件内看着是中文&#xff0c;但服务器传递给客户端的数据不是中文而是乱码。今天就来讲一下如何将VS保存为UTF8。话不多说直接开始。 问题表现 我们拿Unity举例。我们在脚本文件中…

RAGFlow部署与使用(开源本地知识库管理系统,包括kibana配置)

一、RAGFlow 简介 戳我访问RAGFlow RAGFlow 是一款基于深度文档理解构建的开源 RAG&#xff08;Retrieval-Augmented Generation&#xff09;引擎。它可以给我们搭建本地知识库&#xff0c;将用户的知识文档上传到RAGFlow后&#xff0c;通过文档切分、向量入库&#xff0c;在…

本地部署Deep Seek-R1,搭建个人知识库——笔记

目录 一、本地部署 DeepSeek - R1 1&#xff1a;安装Ollama 2&#xff1a;部署DeepSeek - R1模型 3&#xff1a;安装Cherry Studio 二、构建私有知识库 一、本地部署 DeepSeek - R1 1&#xff1a;安装Ollama 1.打开Ollama下载安装 未科学上网&#xff0c;I 先打开迅雷再下…