如何用f_write往SD卡里一次写2byte的数据

2019-10-16 07:25发布

程序里要把采集的温度数据写到SD卡里,温度数据已经放在temperature变量;
  u16 temperature;

  res=f_open (&fil,"0:/test.txt", FA_CREATE_ALWAYS|FA_WRITE);

  f_write (&fil,&temperature, sizeof(temperature)-1, &bww);
  
  f_close(&fil);
但是写到sd里的数据有问题,不是temperature变量里的内容,

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
kk12138
1楼-- · 2019-10-17 04:48
GS1101923161 发表于 2016-9-5 16:57
竟然知道要写入16bit的数据,为何不直接设置写入2byte,还是用sizeof

f_write(&fil,&temperature, 2, &bww);
这样写进去sd'卡里只有一个0,程序里是想2s写一次,连续写数据实现不了
GS1101923161
2楼-- · 2019-10-17 07:25
kk12138 发表于 2016-9-5 17:05
f_write(&fil,&temperature, 2, &bww);
这样写进去sd'卡里只有一个0,程序里是想2s写一次,连续写数据实 ...

你写入是个16进制数,你用文本文件的形式打开,能看到个0很正常,除非你写入的是个字符串,想查看16进制数是否写入成功,你应该用程序去读取它,然后打印出来才对。还有,在进行16进制的数据读写时,先用个普通的字符串做下读写测试,如果没问题,再进行16进制数的读写。
kk12138
3楼-- · 2019-10-17 08:59
 精彩回答 2  元偷偷看……
GS1101923161
4楼-- · 2019-10-17 10:41
kk12138 发表于 2016-9-5 17:43
多谢指点,现在已经可以读到正确的数据了,但是那个温度值每次只写一次,我是想把那个f_write放到一个循 ...

那就一直写啊,反正你每个数据的长度都是固定的,读取的时候可以都读出来,然后每2个字节算一个数据,就行了。还有个方法,就是可以将16进制数据转换成字符串的形式写入txt中,然后每个数据直接以一个特殊的字符做间隔符,比如空格或逗号啥的,这样可以防止在16进制的情况下因数据写入错误而导致数据位移,提高数据存储的正确率,当然,如果你想直接在16进制数的后面加个分隔符,我建议不要这么做,因为你很难保证这个数据和间隔符不会一样。
shihantu
5楼-- · 2019-10-17 11:54
kk12138 发表于 2016-9-5 16:35
那个temperature里放的是16bit的温度数据

f_printf (&fil,"temp = %d", temperature);
neuangel
6楼-- · 2019-10-17 15:41
楼主,我遇到一个问题,就是  把USART_RX_BUF[20]={7b 00 01  00 00 01 01 01 00 01 00 00 00 00 00 00 00 00 00 7d}里面都是16进制的数据,0X全部省略写了,写入的时候不能写入,但是写入如USART_RX_BUF[20]={“abcdefg”}字符的形式就可以,请问你遇到这个问题了么?怎么解决的呢

谢谢

一周热门 更多>