Fatfs 在 SD卡 存储2000多个浮点 数组 的问题

2019-12-23 18:34发布

本帖最后由 kalo425 于 2013-11-26 21:04 编辑

       
帮同学弄了个新号,没有啥莫元了。都送给你们
是这样的,我有2000多个浮点数据,需要保存data.x 和 data.y,

----------------------------------------------------------
最开始想保存成csv格式的。
001.jpg (16.08 KB, 下载次数: 0) 下载附件 2013-11-26 20:52 上传
问题1,第二行没分开,在一个格子里面。
问题2,那2000多个数据涅??妈蛋··怎么都是空的。外面文件可以7K呢

  f_puts(" 未处理的光谱数据 ",&file);
    f_lseek(&file,file.fptr);
    f_sync(&file);
        f_puts(" 位移 强度 ",&file);

//,我已经加了 制表符号了,妥妥的, “ ” 位移和强度怎么就都在一个格子里面呢?
=================================================
  1.    for(i=0;i<cnt;i++)
  2.     {
  3.         f_printf(&file, "%.2f %.0f ",pbuf[i].x,pbuf[i].y);
  4.                 printf("%.2f ",pbuf[i].x);
  5.     }
复制代码
然后看这个  格式化输出也不对啊·····都是空的,我加了一句从串口打印,打印出来的都是对的·····
--------------------------------------------------------------------------------------------

后来我保存成txt的,还是不行·····看到那个f_printf(&file, "%.2f %.0f ",pbuf.x,pbuf.y);  了吧
txt文件里面,没有数据,都是这个 .2f  .f····

=============================
看在40块大洋,我的全部家当的面子上,大家帮帮忙
小弟水平有限,请轻喷哈
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
24条回答
kalo425
1楼-- · 2019-12-23 19:18
知道肿么回事了,

首先 1,使用逗号分隔符,

001.jpg (70.41 KB, 下载次数: 0)

下载附件

2013-11-27 18:36 上传



注意那个 逗号 哦;

第二,注意那个sprintf 格式化字符,存在 那个变量,我刚开始定义的是  char *,后来char 数组  char [20]  就好了···哎 ,这个问题折腾死我了
luweixuan
2楼-- · 2019-12-24 00:42
本帖最后由 luweixuan 于 2013-11-27 11:49 编辑

给你看看我修改的f_printf_0()函数
  1. #include <stdarg.h>
复制代码
  1. // add by user named lux
  2. int f_printf_0 (                        /* Put a formatted string to the file */
  3.                 FIL* fil,
  4.                 const TCHAR* str,
  5.                 ...)               
  6. {
  7.   INT len;
  8.   char buff[512];  
  9.   
  10.   va_list args;
  11.   va_start(args,str);
  12.   len = vsnprintf(buff,512,str,args);
  13.   if (len < 0 )
  14.   {
  15.     va_end(args);
  16.     return len;
  17.   }
  18.   len = f_puts ((TCHAR *)buff,fil);
  19.   va_end(args);
  20.   
  21.   return len;  
  22. }
复制代码

使用示例:
  1. void SaveToFile()
  2. {
  3.   static u8 oldMin=0;
  4.   int r;
  5.   if (oldMin!=RTC_data.Minute)
  6.   {
  7.         oldMin=RTC_data.Minute;
  8.        
  9.         res=f_open(&fsrc_temp,"TEMP.TXT",  FA_OPEN_ALWAYS |FA_WRITE);  // open file
  10.         if (res==FR_OK) uart_printf("Open Tempture File Succes! ");
  11.         else uart_printf("Open Tempture File Fali! ");
  12.        
  13.         f_lseek(&fsrc_temp, f_size(&fsrc_temp));   // point to the end of a file
  14.        
  15.         r=f_printf_0(&fsrc_temp, "%4d/%02d/%02d %02d:%02d %6.2f ",
  16.           RTC_data.Year,RTC_data.Month,RTC_data.Day,RTC_data.Hour,RTC_data.Minute,RTC_data.Tempture);
  17.         if (r<=0)  uart_printf("Save One Tempture Record Fail! ");
  18.         else uart_printf("Save One Tempture Record Succes! ");
  19.        
  20.         res=f_sync (&fsrc_temp);  // close file
  21.         f_close(&fsrc_temp);
  22.        
  23.   }
  24. }
复制代码
示例中的文件打开和关闭你最好放到循环体外,我这个是一分钟记录一个数据所以不需要放外面。
当然,你最好使用逗号和换行符进行数据分割; 在数据里面不好处理的,有歧义;
kalo425
3楼-- · 2019-12-24 06:36
最后几行,不知道怎么变成斜体了,我编辑了2次都不行·····排版有点恶心,大家凑合看看哈····关键帮帮伦家嘛··
abl
4楼-- · 2019-12-24 08:08
f_puts 不处理格式化字符
kalo425
5楼-- · 2019-12-24 11:42
 精彩回答 2  元偷偷看……
kalo425
6楼-- · 2019-12-24 15:45
还是没人看···o(︶︿︶)o 唉····明天在试试了。

一周热门 更多>