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

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

代码架构与分层

  • 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层传递数据

相关文章:

  • 【AI 加持下的 Python 编程实战 2_04】第三章:GitHub Copilot 在 Python 函数设计中的正确打开方式(含本地实操)
  • python局部变量和全局变量
  • 深入理解 C++20 中的 `std::shared_ptr` 原子操作
  • JDK 动态代理和 CGLIB 动态代理
  • 新能源电站系统建设提速!麒麟信安操作系统驱动光伏风电双领域安全升级
  • PEFT简介
  • GitHub Copilot 在 VS Code 上的终极中文指南:从安装到高阶玩法
  • 特种兵旅游之大连3日游
  • Android视频渲染SurfaceView强制全屏与原始比例切换
  • 塔能科技:做节能界的“催化剂”,加速工厂能源改造变革
  • 「速通AI编程开发」共学(三):提示词(Prompts)配置项
  • [Spring]注解开发(2)
  • 【AutoFormer 源码理解】 conv1d
  • 【蓝桥杯】省赛:缴纳过路费(并查集)
  • 虚拟定位 1.2.0.2 | 虚拟定位,上班打卡,校园跑步模拟
  • AI幻觉时代:避坑指南与技术反思
  • 机器学习扫盲系列(2)- 深入浅出“反向传播”-1
  • 粗粒度和细粒度指的是什么?
  • 回顾Transformer,并深入讲解替代方案Mamba原理(图解)
  • 【6. 系统调用】
  • 山西省委常委李金科添新职
  • 中美发布日内瓦经贸会谈联合声明达成关税共识,外交部回应
  • “应急侠”上线,应急管理部正式发布应急科普IP形象
  • 三大股份制银行入局AIC,一级市场再迎“活水”
  • 上海下周最高气温在30℃附近徘徊,夏天越来越近
  • 《三餐四季》广东篇今晚开播:食在岭南,遇见百味