野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 28351|回复: 3

加文件系统,将float型数据写入SD卡的txt文件?

[复制链接]
发表于 2014-4-3 11:45:21 | 显示全部楼层 |阅读模式
加了文件系统后,怎么将float型数据写入SD卡的txt文件内?
我参考ISO的代码,修改后,但是打开TXT文件后里面显示的是  /ݜ?  ,我写入的数据是 1.2255
我想写入一个float型数据,在TXT文件里也显示的是这个数据,通过串口读得到的也是这个数据,我应该怎么修改?
代码如下:
FIL fnew;                                                                                                        /* file objects */
FATFS fs;                                                                                                        /* Work area (file system object) for logical drives */
FRESULT res;
UINT br, bw;                                                    /* File R/W count */
float buffer;
BYTE CHANGE;
float debug=1.2255;
BYTE AD;

int main(void)
{
   /* USART1 config */
                USART1_Config();
                printf("\r\n this is a fatfs test demo \r\n");
       
                /* Sdio Interrupt Config */
                NVIC_Configuration();
       
                /* Register work area for each volume (Always succeeds regardless of disk status) */
                //°ÑÅÌ·û0·Ö¸øfs£¬fsÊÇÒ»¸ö½á¹¹Ìåbuffer/context
                f_mount(0,&fs);//FATFSµÄÅÌ·ûÊÇ0£º 1£º 2£º....
       
       
//                f_mkdir("sub");
//                f_mkdir("sub/sub1");

                /* function disk_initialize() has been called in f_open */
       
                /* Create new file on the drive 0 */
                res = f_open(&fnew, "0:newfile.txt", FA_CREATE_ALWAYS | FA_WRITE );
                 
                if ( res == FR_OK )
                {

                        res = f_write(&fnew, &debug, sizeof(debug), &bw);
                        f_close(&fnew);      
                }

                res = f_open(&fnew, "0:newfile.txt", FA_OPEN_EXISTING | FA_READ);          
                res = f_read(&fnew, &buffer, sizeof(buffer), &br);
                //BYTE AD=(BYTE)buffer;
                //printf("\r\n %s ", &AD);
               
                /* Close open files */
                f_close(&fnew);                                              
                 
    /* Unregister work area prior to discard it */
    f_mount(0, NULL);


谢谢各位了。
回复

使用道具 举报

发表于 2014-4-3 11:49:49 | 显示全部楼层
先把变量转换成字符串:
sprintf(buff,"%f",float_value)

再用f_write写buff
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-3 15:43:04 | 显示全部楼层
flyleaf 发表于 2014-4-3 11:49
先把变量转换成字符串:
sprintf(buff,"%f",float_value)

非常感谢你的回答!
参考你的回答我已经能把float写入到SD卡内,并读出来。我使用f_lseek函数在之前的数据后追加了数据,但是在使用f_read读取的时候,它只读取TXT前一部分的数据,它只能读取textFileBuffer[]的数据,我应该怎么修改?谢谢你的回答
程序如下:
f_mount(0,&fs);//
       
       
//                f_mkdir("sub");
//                f_mkdir("sub/sub1");

                /* function disk_initialize() has been called in f_open */
       
                /* Create new file on the drive 0 */
                res = f_open(&fnew, "0:newfile.txt", FA_CREATE_ALWAYS | FA_WRITE );
                if(res==FR_OK)
                {
                       
                        res = f_write(&fnew, textFileBuffer, sizeof(textFileBuffer), &bw);
                        f_close(&fnew);
                }
                res=f_open(&fnew,"0:newfile.txt",FA_READ|FA_WRITE|FA_OPEN_ALWAYS);
                if ( res == FR_OK )
                {
                        res=f_lseek(&fnew,f_size(&fnew));
                        sprintf(buff,"%f",debug);
                        res = f_write(&fnew, buff, sizeof(buff), &bw);
                        f_close(&fnew);      
                }
                res = f_open(&fnew, "0:newfile.txt", FA_OPEN_EXISTING | FA_READ);          
                res = f_read(&fnew, buffer, sizeof(buffer), &br);
                printf("\r\n %s ", buffer);
               
                /* Close open files */
                f_close(&fnew);                                              
                 
    /* Unregister work area prior to discard it */
    f_mount(0, NULL);
回复 支持 反对

使用道具 举报

发表于 2014-4-3 15:47:47 | 显示全部楼层
你读的时候从开始一直读到文件尾就可以了,使用f_eof 函数可以判断是否到达文件尾。
你的程序:
res = f_read(&fnew, buffer, sizeof(buffer), &br);
估计是输入要读取的字节 sizeof(buffer) 太小吧。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-12-23 19:59 , Processed in 0.035255 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表