我想利用sprintf函数将一组整型数据转换为字符串格式写入字符数组并用“/”分隔各数据,再将字符数组写入SD卡中。可是每次txt文件中都是只能显示最后一个数据,小白求教。。。

2019-08-17 03:08发布

建立txt文件没有问题,主要就是格式转换部分(红 {MOD}部分)。。。希望大家能帮我看看,还想问一句:如何在加速度传感器采集数据的同时就能把数据记录下来呢?
#include "led.h"        //我是在FATFS实验历程的基础上改的
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#include "sram.h"
#include "malloc.h"
#include "string.h"
#include "mmc_sd.h"
#include "ff.h"
#include "exfuns.h"
#include "usmart.h"
#include "math.h"
#include "beep.h"


 int main(void)
 {  
FIL f_txt;               
FRESULT res;
int *N;
char a[10000];
int i=0,j=150,k=0;
char *Data;
for(i=0;i<100;i++)
{
  k+=sprintf(a,"%d",j);      //这里感觉每次都是在文件的开头写的;我的目的是将整型转换为字符串,以“/”分隔,便于以后的读取、辨认
 j++;
 a[k+1]=46;    //46是“/”的ASCII码
 k=k+2;
}
Data=&a[0]; 
 
delay_init();                                           
NVIC_Configuration(); 
uart_init(9600); LED_Init();        
LCD_Init(); 
BEEP_Init();      
exfuns_init(); 
usmart_dev.init(72);
  mem_init(SRAMIN); 

  POINT_COLOR=RED;
LCD_ShowString(60,50,200,16,16,"2015/10/20");  

while(SD_Initialize())
{
LCD_ShowString(60,70,200,16,16,"SD Card Error!");
delay_ms(200);
LCD_Fill(60,70,240,150+16,WHITE);
delay_ms(200);
LED0=!LED0;
}    
  exfuns_init();
  f_mount(0,fs[0]); 
  f_mount(1,fs[1]);          

  res=f_open(&f_txt,"test.txt",FA_OPEN_ALWAYS | FA_WRITE);    
if(res==0)                                        
{
f_lseek(&f_txt,0);                               
  f_write(&f_txt,Data,strlen(Data),(UINT*)&N);      
f_close(&f_txt);                                  
BEEP=1;
delay_ms(300);
BEEP=0;
}
while(1)
{     
LED0=!LED0;
LED1=!LED1;
delay_ms(200);
LED0=!LED0;
LED1=!LED1;
delay_ms(200);

}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
513393302@qq.co
1楼-- · 2019-08-17 22:23
楼主试下文件系统里有个跟printf函数相似的函数,f_printf。试下一下代码
 res=f_open(&f_txt,"test.txt",FA_OPEN_ALWAYS | FA_WRITE);     //打开文件
if(res==0)                                        
{
f_lseek(&f_txt,0);                               //移动写指针
for(i=0;i<100;i++)
{
  f_printf(&f_txt,"%d//",j);      //写入数据及/字符,文件地址会自动增加
 j++;
}
f_lseek(&f_txt,0);                               //移动写指针 
 res = f_read(&f_txt,a,f_txt->size,&br);   //读取全部文件数据    此时文件内数据即为上次写入的数据
f_close(&f_txt);   //关闭文件
一人1人
2楼-- · 2019-08-18 04:14
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-08-18 07:27
回复【9楼】一人1人:
---------------------------------
建议直接写入数组,然后保存数组到sd卡试试.
一人1人
4楼-- · 2019-08-18 10:49
回复【10楼】正点原子:
---------------------------------
这个问题已经解决了,是指针的问题
周志浩
5楼-- · 2019-08-18 15:23
楼主float型解决了吗?
一人1人
6楼-- · 2019-08-18 19:02
周志浩 发表于 2016-1-11 10:44
楼主float型解决了吗?

没试过。。。

一周热门 更多>