野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11439|回复: 10

AD采样以后存储转换的困惑,纠结ing。。。

[复制链接]
发表于 2015-9-21 13:36:40 | 显示全部楼层 |阅读模式
芯片用的是F103VE,MDK环境编写。基本用的都是库函数,ADC双模式采样以后,直接TFT显示已可行,现在想把采样的数据存起来,然后写入SD卡。先说说我现在的方法如下:

float ADC1_ConvertedValueLocal;   这个是AD采样值已经转换成电压值了,每次都由DMA传过来。

float ADC1_savedate1[512];我开一个512的浮点型数组,每次TFT显示的时候顺便存进数组里,当n(计数值到了512),开始调用FATFS文件系统的写函数。
   int Writetxt_to_sd (void)
{   
    f_mount(0, &myfs[0]);
    myres = f_open( &myfsrc , "0:/date1.txt", FA_CREATE_NEW | FA_WRITE);   
    if ( myres == FR_OK )
    {         
        myres = f_write(&myfsrc, ADC1_savedate1,sizeof(ADC1_savedate1), &mybr);
        f_close(&myfsrc);        
        return 0;      
    }   
    else if ( myres == FR_EXIST )
    {
        return FR_EXIST;         
    }   
    else
    {
        return -1;
    }   
}


问题就在这个 f_write函数例程中,都是char或者BYTE(unsigned char)类型,我现在换成浮点数组SD最终读出的乱码,然后长度也不对。
有熟悉FATFS文件系统的大大指点下么 ,怎么写浮点类型数据到SD卡 ,能保存成TXT或者CSV格式就行。
因为要转成TXT文件,我估摸还是要转下格式,那怎么把比较好的方法把浮点数据存到字符数组里。谢谢 急

回复

使用道具 举报

发表于 2015-9-21 13:53:15 | 显示全部楼层
直接用txt保存数据的话,使用sprintf函数把变量转换为字符串,然后把字符串写入文件即可
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-21 13:55:30 | 显示全部楼层
flyleaf 发表于 2015-9-21 13:53
直接用txt保存数据的话,使用sprintf函数把变量转换为字符串,然后把字符串写入文件即可

杨哥,问题是sprintf怎么转换多个浮点呢 我是一个数组的浮点
回复 支持 反对

使用道具 举报

发表于 2015-9-21 13:57:37 | 显示全部楼层
全金属小册老 发表于 2015-9-21 13:55
杨哥,问题是sprintf怎么转换多个浮点呢 我是一个数组的浮点

for循环啊。。如果觉得效率低的话就自己实现sprintf函数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-21 13:57:42 | 显示全部楼层
flyleaf 发表于 2015-9-21 13:53
直接用txt保存数据的话,使用sprintf函数把变量转换为字符串,然后把字符串写入文件即可

int main()       
{
        for(int i=0;i<20;i++)
                {
                  adc_local=(float)i;
                  sprintf(date,"%f",adc_local,',');
                }
        printf("%s",date);
    while(1)
        {             
//                scanf("%d",&a);
        }
return 0;

}

比如这段我写的测试 ,最后就打印了19.0000
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-21 14:00:09 | 显示全部楼层
flyleaf 发表于 2015-9-21 13:53
直接用txt保存数据的话,使用sprintf函数把变量转换为字符串,然后把字符串写入文件即可

怎么把一个浮点+一个逗号',',合起来转成str,然后下一次再在原数组基础上不擦除,再继续写浮点+逗号,这就转成SCV格式了。
回复 支持 反对

使用道具 举报

发表于 2015-9-21 14:00:19 | 显示全部楼层
全金属小册老 发表于 2015-9-21 13:57
int main()       
{
        for(int i=0;i

搞个字符串数组,一个元素存储一个转换来的数字,然后到一定数量后就把字符串数组一次定稿文件
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-21 14:05:13 | 显示全部楼层
flyleaf 发表于 2015-9-21 14:00
搞个字符串数组,一个元素存储一个转换来的数字,然后到一定数量后就把字符串数组一次定稿文件

能不能直接用sprintf函数把浮点数组 转成字符串数组?这样貌似省事
回复 支持 反对

使用道具 举报

发表于 2015-9-21 14:06:06 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-21 15:49:29 | 显示全部楼层
flyleaf 发表于 2015-9-21 14:06
http://zhidao.baidu.com/link?url=xQAenNoWptgsNc5kYwEKFXWAjlV4v6DsnXNSNkXbuVNgOpNaKO5-LybiG_-KYNjDxKs ...

谢谢,杨哥 不过我还是用了 笨办法实现了 具体如下:

void savedate( unsigned int i)
{
        unsigned int n;       
        unsigned int len;       
        unsigned int count;
        n=i;
        adc_convert();        
        len=sprintf(str,"%5.4f",ADC1_ConvertedValueLocal);       
        for(count=0;count<len;count++)
        {
                if(n!=0) ADC1_savedate1[n*len-1]=',';
                ADC1_savedate1[n*len+count]=str[count];
               
         }
回复 支持 反对

使用道具 举报

发表于 2015-9-21 16:53:48 | 显示全部楼层
全金属小册老 发表于 2015-9-21 15:49
谢谢,杨哥 不过我还是用了 笨办法实现了 具体如下:

void savedate( unsigned int i)

其实链接里的fprintf应该更好
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 18:42 , Processed in 0.033682 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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