1.FatFS入门——文件系统移植实验
2.啥?你没听过SpringBoot的FatJar?
3.STM32CubeMX系列 | FATFS文件系统
4.使用maven和fat jar/war运行应用程序的对比
FatFS入门——文件系统移植实验
介绍SPI存储数据的局限性,指出需要管理方案进行数据操作,FatFS文件系统应运而生。
FatFS提供封装的数据文件状态管理,通过调用API即可便捷操作文件,类比Windows操作系统高度封装的galgame源码文件系统。
裸机上挂载文件系统前需格式化,擦除原有数据并创建文件和目录索引,便于记录数据存储状态。
FatFS结构为面向小型嵌入式系统的通用FAT文件系统,使用ANSI C语言编写,独立于底层I/O介质,易于移植。
使用SPI与WQ芯片通讯,将FatFS移植到WQ芯片,通过a版本的源码,包含doc和src两个文件夹。
src文件夹重点分析,option文件夹包含各语言所需文件,history.txt和readme.txt文件说明版本历史及系统介绍。
阅读源码可从integer.h、jar看源码diskio.c、ff.c顺序进行,了解FatFS、用户程序与底层程序配合。
FatFS源码中,ff.c、ff.h、integer.h、diskio.h及cc.c文件不需修改,只需调整diskio.c及ffconf.h文件。
在SPI读写flash实验基础上移植FatFS,对diskio.c和ffconf.h进行修改与配置。
diskio.c文件中函数调用底层驱动函数控制flash读写操作,通过宏定义实现不同物理设备操作。
盘状态函数执行设备ID获取与初始化,根据设备ID判断是否初始化完成。
分配空间给FatFS使用,调整所有地址偏移量,进行扇区擦除与写入操作。
ffconf.h文件定义FatFS功能配置的云发卡源码宏,修改相关配置以适应具体环境。
完成移植后,进行编译测试,执行格式化设备、挂载FatFS文件系统、读写测试。
挂载文件系统使用f_mount()和f_mkfs()函数,读写测试使用f_open()、f_write()、f_close()、f_read()函数。
移植并测试完成后,FatFS文件系统成功部署于WQ芯片,实现数据管理功能,后续文章将详细讲解基础功能使用。
啥?你没听过SpringBoot的FatJar?
在企业开发中,SpringBoot以其广泛的应用备受瞩目。通常,SpringBoot项目的部署方式是通过jar包,而这种jar与普通的简看源码jar有所不同。一般的jar在运行时如果依赖第三方jar,可能会遇到问题,但SpringBoot的fatJar(胖jar)却能直接部署并运行,这得益于其特殊的打包策略和SpringBoot的启动原理。
本文将带您深入了解SpringBoot的启动过程。首先,SpringBoot的入口是启动类的main方法,这是启动流程的起点。通过分析run方法和源码,我们可以对启动流程有个大概了解。深入研究可以查看SpringBoot启动类的源码。
接着,我们探讨java -jar命令如何运行整个SpringBoot应用。SpringBoot的fatJar设计使得所有依赖都包含在单个jar中,这得益于spring-boot-maven-plugin插件。这个插件在打包过程中,将maven的jar转换为fatJar,并保留原始jar文件。
fatJar内部的META-INF清单文件包含了项目信息和入口程序,使得jar可以直接执行。thinkphp源码分析当运行java -jar时,实际上是通过LaunchedURLClassLoader类加载器加载所有依赖并执行start-class方法,这一过程打破了传统的双亲委派机制,通过ThreadContextClassLoader实现。
进一步分析,createMainMethodRunner方法通过类加载器加载启动类,然后反射调用其main方法,从而启动整个SpringBoot项目。这就是SpringBoot从启动类开始,初始化组件,最终完成整个启动流程的过程。
STMCubeMX系列 | FATFS文件系统
FATFS文件系统是为小型嵌入式系统设计的FAT(文件分配表)文件系统模块,是操作系统中用于明确存储设备或分区上的文件的方法和数据结构。FATFS文件系统支持FAT、FAT、FAT格式,允许在多个存储媒介上使用,并且具备独立的缓冲区,支持多个文件同时读写操作。它的设计遵循ANSI C标准,与磁盘I/O层分离,具有高度的灵活性和可移植性,同时兼容Windows文件系统。
FATFS文件系统的结构层次包括应用层、FATFS模块层和底层接口。应用层是用户与FATFS模块交互的接口,它提供了一系列应用接口函数,如f_open、f_read、f_write和f_close等,使得用户可以像在PC上操作文件一样简单。FATFS模块层是文件系统的实现层,它实现了FAT文件读写协议,提供ff.c和ff.h文件供用户使用。底层接口是FATFS与存储介质交互的部分,包括存储介质读写接口和提供文件创建、修改时间的实时时钟。移植FATFS模块时,通常只需修改两个文件:ffconf.h和diskio.c。
FATFS的移植过程包括数据类型定义、配置和函数编写三个步骤。在数据类型定义中,用户需要在integer.h文件中设置数据类型。配置步骤通过ffconf.h文件完成,用户可以在这里配置FATFS的相关功能。最后的函数编写则涉及到在diskio.c文件中实现底层驱动,包括disk_initialize、disk_status、disk_read、disk_write、disk_ioctl和get_fattime等六个接口函数。
在使用FATFS文件系统时,STMCubeMX可以简化这一过程。通过STMCubeMX配置FATFS,用户仅需简单设置即可完成数据类型定义、配置和函数编写等步骤。STMCubeMX的底层实现框图展示了FATFS与硬件的交互,以及如何通过软件接口实现SD卡的读写操作。
硬件设计中,D1指示灯用于指示系统运行状态,串口1则用于打印调试信息。软件设计部分,首先需要通过STMCubeMX进行设置,然后使用MDK-ARM进行编程。在进行编程时,需要确保使用的是支持FATFS文件系统的SD卡,并且在电脑上进行格式化,建立FAT文件系统。
下载验证阶段,用户需要编译源代码并将其下载到开发板上。在开发板运行后,D1指示灯将不断闪烁,串口会打印出调试信息。将SD卡插入电脑后,用户会发现SD卡中已建立两个文件:Sensor.csv和STMcube.txt。打开这些文件后,用户可以看到写入的数据。
使用maven和fat jar/war运行应用程序的对比
在处理Spring Boot应用程序的部署时,我们通常会遇到两种方式:使用Maven命令或创建fat jar/war包。Maven的mvn spring-boot:run命令提供了便利,而fat jar/war则适用于不同的部署环境。
Maven Spring Boot Plugin的运用,使得部署过程更加高效,它能在打包时自动下载依赖。通过在项目根目录下执行mvn命令,应用程序会自动运行,日志清晰可见。然而,如果要打包成fat jar/war,就需要借助插件,确保依赖被包含在内。对于多主类项目,需要明确指定启动类。
War文件解压后,可以看到包含启动类和Spring Boot默认main类的MANIFEST.MF文件。相比之下,jar文件的结构稍有不同,WEB-INF被替换为BOOT-INF,MANIFEST.MF中Start-Class保持一致,但Main-Class有所调整。
在选择运行方式时,开发环境通常偏向于mvn命令,因为它与源代码紧密关联,便于快速迭代。而在生产或线上环境,fat jar/war由于其小型化和无需额外依赖,更适合部署。只需要Java运行时环境即可。
以上内容可通过访问github.com/ddean/le...获取代码示例,更多教程可参考flydean的博客。