FATFS文件系统读写数据

FATFS文件系统灵活易用,很适合小型嵌入式系统的开发,比如汉字存储或者将传感器测得的实时数据直接保存到TF/SD卡中,避免了记录实验数据的繁重工作,也提高了后期进一步处理数据的效率。

FATFS文件系统参考手册和官方下载地址:http://elm-chan.org/fsw/ff/00index_e.html


本次试验采用的是最新的ff12,版本之间的差异详见版本说明。

1.新建工程:新版本直接加入了unicode的编码形式,直接将diskio.c和ff.c以及unicode.c加入项目中,并根据实际项目作相应修改,本文最后将附上整个项目的代码。


2.主函数:先将数据存入TF卡中,再进行读取操作,最后将写入的数据打印到串口。

	f_mount(&fs, "", 0);	// Register work area to the default drive 

	res = f_open(&fdst,"0:/Data.txt", FA_WRITE | FA_OPEN_APPEND);//以写和追加的方式打开文件
	 
	if ( res == FR_OK )
 	 { 
		f_lseek(&fdst, f_size(&fdst)); //将文件指针移动到文件末尾
		/* 将缓冲区的数据写到文件中 */
		res = f_write(&fdst, textFileBuffer, sizeof(textFileBuffer), &bw);     
     		/*关闭文件 */
   		f_close(&fdst);      
  	}   



ff12中打开文件的方式有以下几种:

FATFS文件系统读写数据_第1张图片

我们只是将数据追加到文件的末尾,不对原文件进行覆盖,保持数据的丰富性。f_lssek每次都将文件指针移动到文件末尾,方便追加数据操作。每次写完数据要记得关闭文件。


3.将其他类型的数据转换为字符串型输出:f_write操作只支持以字符串的形式写入数据,因此,对于整形、浮点型数据需要先转换为字符串存储在字符数组中。sprintf函数的使用方法类似于printf,可参考其使用形式。

sprintf(dataTemp, "%.3f |  %.3f  |  %.3f  |  %.3f  \r\n",dataBuffer[0], dataBuffer[1], dataBuffer[2],dataBuffer[3] );

式中dataTemp为字符数组,dataBuffer为需要写入文件的浮点数组。


你可能感兴趣的:(#,【硬件设计】,嵌入式系统)