上位机图像处理和嵌入式模块部署(f407 mcu中fatfs中间件使用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

  

        前面我们已经实现了spi norflash的驱动,理论上这已经可以实现数据的持久化保存了。为什么还需要一个文件系统呢?主要原因还是不方便。如果没有文件系统的话,我们访问文件都需要知道确切文件的sector地址和大小,这样很麻烦。此外,写入、读取文件的时候,还要提前规划好文件的大小,防止不同的文件之间相互覆盖。而有了fatfs之后,使用上就不需要这么小心翼翼了。

        另外,今天我们还提出了一个中间件的概念。什么叫中间件呢,其实就是说这部分代码本身处于系统中间的位置。对上,它提供调用接口;对下,它需要具体硬件的适配。所以,只有这样的代码才称之为中间件。

1、除了fatfs之外,还有哪些中间件

        广义的中间件还是蛮多的。比如说图形界面的lvgl,网络协议栈的lwip,实时操作系统rtos严格意义上也可以看成是中间件,毕竟它下面对着cpu,上面提供os接口。

2、fatfs需要适配哪些接口

        目前来说,fatfs需要适配这么几个接口函数,

disk_status
disk_initialize
disk_read
disk_write
disk_ioctl
get_fattime

        其中disk_status一般就是判断一下硬件的状态。disk_initialize代表硬件初始化,norflash的初始化话就在这里。disk_read代表读取数据。disk_write代表写入数据。disk_ioctl主要就是回复一些硬件属性,比如sector多大,整个硬件容量多大等等。get_fattime获取系统时间。

        这几个接口都是在diskio.c文件里面,还是很好辨认的。

3、fatfs支持哪些硬件

        理论上fatfs支持任何的硬件,只要按照它的要求做好底层适配就好了。不过目前为止,用的比较多的还是norflash和tf卡。norflash一般是固化在开发板的,往里面存文件不太方便。这个时候如果有一个可插拔的tf卡,直接通过fatfs,把文件从tf卡copy到norflash,那就很方便了。

4、fatfs给上层提供的接口

        fatfs对外提供的接口其实和大多数文件系统都差不多,一般就是这些接口,大家不用全部掌握,用的什么学什么就可以了,

f_mount
f_mkfs
f_open
f_write
f_read
f_close

5、配置fatfs

        fatfs自身也是可以配置的,比如我们希望对fatfs进行功能裁剪的话,直接配置ffconf.h文件就可以了。

6、测试方案

        fatfs的测试还是比较容易的。首先对norflash进行fatfs加载,如果发现不能加载,那么先进行格式化操作,格式化完了再加载。接着就是写入数据、读取数据。判断一下写入的数据和读取的数据是不是吻合。最后就是卸载fatfs了。

7、调试

        本身作者给出了完整的项目代码,和之前norflash相比较,其实就多了fatfs三个文件,

        编译、烧入后,我们发现fatfs执行是失败的。进一步调试,发现在disk_status状态确认的时候,返回值是错误的。单步后发现,还是flashid判断的问题,重新调整修改一下代码,

	  if(SPI_FLASH_ReadID() == 0x684016){status &= ~STA_NOINIT;}else{status = STA_NOINIT;;}

        至此,我们可以看到在上位机串口打印上,一切ok正常了,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/21250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Win系统安装 Ubuntu20.04子系统 WSL2 (默认是C盘,第7步开始迁移到D盘,也可以不迁移)

1、简介 WSL在Windows 10上原生运行Linux二进制可执行文件,不用单独安装虚拟机。 WSL2是WSL的第二个版本,提供了与WSL相比的显著性能改进和完全的系统呼叫兼容性。通过运行Linux内核在一个轻量级虚拟机(VM)中实现。 2、安装 电…

ThingsBoard MQTT 连接认证过程 源码分析+图例

整个连接过程如图所示: 高清图片链接 1、环境准备 thingsboard3.5.1 源码启动。(不懂怎么启动的,大家可以看我的博文ThingsBoard3.5.1源码启动)MQTTX 客户端(用来连接 thingsboard MQTT)默认配置。queue.…

7-15 位模式(dump_bits)---PTA实验C++

一、题目描述 为方便调试位运算相关程序,先做个展现位模式的小工具。 建议参照以下接口实现: // 利用函数重载特性:string dump_bits(char x);string dump_bits(short x);string dump_bits(int x);string dump_bits(long long x);// 或用函…

JVM类加载过程

在Java虚拟机规范中,把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java.lang.Class对象,这个过程被称作类加载过程。一个类在整个虚拟机周期内会经历如下图的阶段&…

C++编程法则365天一天一条(323)main函数执行之前和之后的动作

在C和C程序中,main 函数之前和之后执行的函数是由编译器、链接器和运行时环境共同决定的。以下是一些通常会在这些阶段执行的关键函数: 在 main 函数之前执行的函数 启动代码(Start-up Code): 这是由编译器提供的一段代码&#…

DIYP对接骆驼后台IPTV管理,退出菜单中显示用户名已经网络信息,MAC,剩余天数,套餐名称等

演示:https://url03.ctfile.com/f/1779803-1042599473-4dc000?p8976 (访问密码: 8976) 后台加上EPG,增加一些播放源的动态端口替换。 前台app上,退出菜单中显示用户名已经网络信息,MAC,剩余天数,套餐名称…

Python知识点17---包

提前说一点:如果你是专注于Python开发,那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了,而如果你和作者一样只是操作其他技术的Python API那就足够了。 Python的包,你可以把它看成是一个大的模块,它…

JAVA基础|多线程

什么是线程? 线程(Thread)是一个程序内部的一条执行流程。 多线程是什么? 多线程是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行) 一. 如何在程序中创建出多条线程? Ja…

新接手业务的线上Bug特别多怎么办?

文章目录 接手:保证质量顺利过渡紧急质量审计临时增加测试频次灰度发布加强监控与预警建立快速反馈机制 打补丁:针对性解决质量问题Bug 分析与分类测试策略优化环境一致性 搞基建:全流程质量控制需求分析与评审设计阶段的评审与验证代码质量控…

Windows10系统中安装与配置PyTorch(无GPU版本)

文章目录 1. 什么是PyTorch2. PyTorch的安装与配置(无GPU)2.1 创建环境2.2 安装pytorch库(无GPU)2.3 验证安装结果 1. 什么是PyTorch PyTorch 是一种用于构建深度学习模型且功能完备的开源框架,通常用于处理图像识别和…

JVM学习-自定义类加载器

为什么要自定义类加载器 隔离加载类 在某些框架内进行中间件与应用的模块隔离,把类加载到不同的环境,如Tomcat这类Web应用服务器,内部自定义了好几种类加载器,用于隔离同一个Web应用服务器上的不同应用程序 修改类加载的方式 …

OpenCV 的几种查找图像中轮廓边缘的方法

原始图片: 1、Sobel() Sobel 算子结合了高斯平滑和微分,用于计算图像的梯度,从而突出显示边缘。 import cv2# 读取图像 image cv2.imread(image.png, cv2.IMREAD_GRAYSCALE)# 使用 Sobel 算子查找水平和垂直边缘 sobel_x cv2.Sobel(image…

建筑企业有闲置资质怎么办?

如果建筑企业拥有闲置资质,可以考虑以下几种方式来充分利用这些资质: 1. 租赁或转让资质: 将闲置的建筑资质租赁给其他企业或个人使用,或者通过转让的方式将资质出售给有需要的企业或个人。 2. 提供咨询服务: 利用建…

git分布式版本控制系统(四)

目前世界上最先进的分布式版本控制系统 官方网址:https://git-scm.com 学习目标: 1 了解 git 前世今生 2 掌握 git 基础概念、基础操作 3 各种 git 问题处理 4 互联网常用 gitflow(工作流程规范) 5 git 代码提交规范 6 git 分支管理及命名规范 常见问…

OneForall工具的下载安装和使用(Windows和Linux)

目录 OneForall的介绍 OneForall的下载 OneForall的安装 安装要求 安装步骤(git 版) 安装(kali) OneForall的使用命令 在Windows 在Linux(kali) OneForall的结果说明 免责声明 本文所提供的文字和…

车辆前向碰撞预警系统性能要求和测试规程

前言 本文整理《GB/T 33577-2017 智能运输系统-车辆前向碰撞预警系统性能要求和测试规程》国标文件关键信息,FCW系统性能和测试右给深层次的认识。 术语和定义 车辆前向碰撞预警系统 forward vehicle collision warning system自车 subject vehicle(SV)目标车辆 target ve…

【Linux】查找和压缩

一、文件查找 1、命令查找 which 2、文件查找、依赖数据库 locate 3、文件查找 find 语法:find [path] [options] [expression] [action] ①按文件名 -name按名 -iname可不区分大小写 ②按文件大小 5M:5M以上文件 5M:5M文件 -…

高中数学:解三角形相关公式总结及用法总结

一、正弦定理 二、余弦定理 三、三角形面积公式 由正弦定理,可以推出三角形的面积公式: S*ab*sinC S*ac*sinB S*bc*sinA 四、使用方法总结 五、练习 例题1 解析 对条件等式进行变形,结合余弦定理,求出∠A的度数,从而…

【面经分享-CPP篇】[建议收藏!!] C++基础20问-01

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新c面试基础 👏 感谢大家的订阅➕ 和 喜欢💗 文章目录 1.题目:解释C中的RAII机制。2.题目:解释C中的智能指针及其类型。3.题目&#xf…

从内存到sql的upsert

业务的upsert ​ 在写业务时,大家一开始都会以顺序流程的方式开始着手写代码,CR时再看代码,会有不一样的感觉。 1. 需求描述 ​ 现有一张数据库表,表字段结构如下: 字段名称类型描述uuidstring数据的唯一键datastrin…