基于STM32 FatFs文件系统移植 部分问题解决办法

项目场景:

基于STM32 FatFs文件系统移植 ,部分的个人遇到问题解决办法,以野火开源代码为例。


问题一 描述:

例程中采用写入常量,我们如何向文件系统写入变量


解决方案:

采用sprintf函数,将变量格式化写入字符数组

C语言sprintf()函数:将格式化的数据写入字符串_C语言中文网

问题二 描述:

需要多次向文件系统写入数据


原因分析:

FATFS fs;					/* FatFs文件系统对象 */
FIL fnew;					/* 文件对象 */
FRESULT res_sd;             /* 文件操作结果 */
UINT fnum;            		/* 文件成功读写数量 */
BYTE ReadBuffer[1024]={0};  /* 读缓冲区 */
BYTE WriteBuffer[] ="W";    /* 写缓冲区*/

/* 注册一个工作区域 */
res_sd = f_mount(&fs,"0:",1);		

/*j 打开文件,如果文件不存在则创建它 */

printf("\r\n****** 即将进行文件写入测试... ******\r\n");	

res_sd = f_open(&fnew, "0.txt",FA_CREATE_ALWAYS | FA_WRITE );

    if ( res_sd == FR_OK )
     {
            printf("》打开/创建FatFs读写测试文件.txt文件成功,向文件写入数据。\r\n");

            /* 将指定存储区内容写入到文件内 */
            res_sd=f_write(&fnew,W,sizeof(W),&fnum);

            if(res_sd==FR_OK)
                {
                    printf("》文件写入成功,写入字节数据:%d\n",fnum);
                    printf("》向文件写入的数据为:\r\n%s\r\n",W);
                }
    else
        {
            printf("!!文件写入失败:(%d)\n",res_sd);
        }    

        /* 不再读写,关闭文件 */
            f_close(&fnew);
      }


解决方案:

在文件系统打开后,根据文件字节大小移动读/写指针,调用f_lseek函数

        fres = f_lseek(&file, f_size(&file)); 

具体可查看FatFs网站:FatFs - f_lseek (elm-chan.org)http://elm-chan.org/fsw/ff/doc/lseek.html

在打开文件系后(f_open)之后调用

f_lseek,使其指针移动相应位置,指到文件尾端

第二次打开文件系统时

res_sd = f_open(&fnew, "0.txt", FA_WRITE );
	if ( res_sd == FR_OK )
		{
		printf("》打开/数据读取.txt文件成功,向文件写入数据。\r\n");

		 /* 将指定存储区内容写入到文件内 */
		res_sd =f_lseek (&fnew,f_size(&fnew));
		res_sd=f_write(&fnew,W,sizeof(W),&fnum);

		 if(res_sd==FR_OK)
			{
			printf("》文件写入成功,写入字节数据:%d\n",fnum);
			printf("》向文件写入的数据为:\r\n%s\r\n",W);
			}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值