打印
[应用相关]

Fatfs f_write如何写入回车换行?

[复制链接]
12110|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hars19790220|  楼主 | 2015-4-18 18:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned char buff[1024];
我定义这样一个缓冲区,然后我通过两路CAN接收几十个节点的数据,都存放到buff[]中,然后通过f_write写入SD卡,每隔一段时间存一次,但是我需要把每次接收到的数据用回车换行符隔开,以便存储后每一条CAN数据占一行。
     我的第一个问题是:在buff中写入什么,存到SD卡中会是回车换行。
     我的第二个问题是:我收到的都是16进制数据,怎么写入buff,才能使存到SD卡后0x01是01二不是1,以便正确区分写入的每一个16进制数。
由于数据量大,不能使用sprintf进行格式化。希望各位大神提供解决方法!
沙发
MOn51| | 2015-4-18 19:52 | 只看该作者
字写的多,但是个低级问题。16进制也好,2进制也好,都可以写入BUFF。只要它是8位的就可以!在最后添加一个\r\n.就可以了。也就是13,10!!

使用特权

评论回复
板凳
hars19790220|  楼主 | 2015-4-18 22:16 | 只看该作者
接收的数据顺序存到buff, buff[index] = r_data
都存完了,写
buff[index1] = 0x13;
buff[index1+1] = 0x10
是这样么?

第二个问题怎么解决,事实上存到SD卡中的TXT文档中 0x01会存储为1

使用特权

评论回复
地板
戈卫东| | 2015-4-18 22:28 | 只看该作者
二进制数据用回车换行分隔不太好吧?

使用特权

评论回复
5
hars19790220|  楼主 | 2015-4-18 22:55 | 只看该作者
CAN 一帧数据加上ID一共12字节,因为数据源多必须换行

使用特权

评论回复
6
hars19790220|  楼主 | 2015-4-18 22:57 | 只看该作者
是不是应该先吧一个16进制数转换成两个字符存入buff,一帧数据存储完毕后再写入13 10

使用特权

评论回复
7
lvyunhua| | 2015-4-19 15:06 | 只看该作者
要看f_write这个函数一次是写入字符串还是16进制数据。一次写入多少个字节或者扇区。

使用特权

评论回复
8
airwill| | 2015-4-19 18:04 | 只看该作者
本帖最后由 airwill 于 2015-4-19 18:10 编辑

在最后添加一个\r\n是可以的。或者一个 \n 也可以。
不过, 条件是你的这些数据已经转换成 ASC 码数据,而非二进制码。可以使用 sprintf 进行格式化,不过还是建议自己写个bin2asc 的函数来转换 ASC 码,提高数据处理速度。

ASC 码数据会多占很多空间,所以我在做 CAN 数据包保存的时候,也考虑到数据保存的空间消耗问题,采用了二进制数保存,由于保存的 DLC 码,并不需要 \r\n 做分段,通过上位机根据 DLC 自动进行换行处理。
希望这个思路能给楼主一点参考。

使用特权

评论回复
9
铜牌之路| | 2015-6-20 18:01 | 只看该作者
你好  用f_write 写数据到内存卡,我在一个实验过程中要写多组数据,但是现在是每次是后面的覆盖前面的,就只显示了最后一组。怎么用换行,把所以的数据都一行一行显示出来呢?感激涕零

使用特权

评论回复
10
戈卫东| | 2015-6-20 19:45 | 只看该作者
0X01本来就是1 你怎么可以要求它不是1.。。。。。。。。

使用特权

评论回复
11
铜牌之路| | 2015-6-20 21:01 | 只看该作者
戈卫东 发表于 2015-6-20 19:45
0X01本来就是1 你怎么可以要求它不是1.。。。。。。。。

使用特权

评论回复
12
铜牌之路| | 2015-6-20 21:03 | 只看该作者
戈卫东 发表于 2015-6-20 19:45
0X01本来就是1 你怎么可以要求它不是1.。。。。。。。。

菜鸟请教大神怎么换行呢?帮忙解答一下。谢谢了

使用特权

评论回复
13
戈卫东| | 2015-6-20 21:06 | 只看该作者
对于SD卡或文件系统来说,换行符和其他字符是一样的
换行是你自己的数据表示,可以自己定义

使用特权

评论回复
14
铜牌之路| | 2015-6-20 21:16 | 只看该作者
好吧,我的总是只显示最后的数据,好像前面的数据都被后面的覆盖了。是不是换行就不会覆盖了?

使用特权

评论回复
15
铜牌之路| | 2015-6-20 21:21 | 只看该作者
        if(Y)       
        {
                sprintf(distance_str, "%5d %5d %5d %5d", h,H,C,t);//¼ÓÈë»»Ðзû\nsd¿¨ÖÐûÓÐÊý¾Ý
                         res=f_open(&file,"/count.txt",FA_OPEN_ALWAYS); //´ò¿ª»òÕßн¨Îļþ¼Ð
          if(res==FR_OK)
         {
         f_open(&file, "/count.txt", FA_WRITE | FA_CREATE_ALWAYS);
          {
                        //res=f_write(&file, distance_str, sizeof(distance_str)-1,&bw);
                        res=f_write(&file, distance_str, 30,&bw);
                }
          f_close(&file);
         }
               
  }        这怎么换行,上面是我每次要显示的一组数据         

使用特权

评论回复
16
铜牌之路| | 2015-6-20 22:02 | 只看该作者
楼主解答了

使用特权

评论回复
17
chenci2013| | 2015-6-21 10:12 | 只看该作者
/r/n

使用特权

评论回复
18
chenci2013| | 2015-6-21 10:13 | 只看该作者
使用spritnf

使用特权

评论回复
19
铜牌之路| | 2015-6-21 10:17 | 只看该作者

在哪些\n呢?

使用特权

评论回复
20
chenci2013| | 2015-6-21 10:22 | 只看该作者

使用sprintf 将 你的数据转换字符串就直接写就行了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

10

帖子

2

粉丝