金牌会员
- 积分
- 1987
- 金钱
- 1987
- 注册时间
- 2014-7-1
- 在线时间
- 188 小时
|
1金钱
本帖最后由 shenqihao 于 2023-7-27 13:25 编辑
使用fatfs做个简单的数据库。仿真调试时候发现,原先对指针进行操作,加了断点仿真运行正常,实际测试运行错误。
后来改为数组就能正常运行,大家遇到过这种情况吗,可能什么原因?补充下,芯片是H750VBt6补充,指针的操作,文件名提取流程如下:
- char* filename
- filename=mymalloc(SRAMIN,LineMinByte);
- filename="0:ParticleFile/MeasureData";
- strcat(filename,DataChangeNumberToString_C(Particle1));//DataChangeNumberToString_C是把数字变为指针返回
- strcat(filename,“.txt”);
- //存储操作
- myfree(SRAMIN,filename);
复制代码
- //写入一串字符串
- //n,写入的指定行数
- //dw,写入一串字符串
- void FileStoreWriteLine(u32 n,u8* dw)
- {
- //char* filename;//使用指针操作仿真加断点可以现实,实测不行,改用数组实现
- u32 fsize;
- u16 FileNum=0;
- u32 d;
- FileNum=n/FileMaxLine;
- d=n%FileMaxLine;
- //文件名
- FileNameArr[26]=FileNum/100+'0';
- FileNameArr[27]=(FileNum/10)%10+'0';
- FileNameArr[28]=(FileNum)%10+'0';
- FileNameArr[29]='.';
- FileNameArr[30]='t';
- FileNameArr[31]='x';
- FileNameArr[32]='t';
-
- mf_mkdir("0:ParticleFile"); //如果文件夹已经存在,就不创建.如果不存在就创建新的文件夹.
- mf_open((u8*)FileNameArr,FA_OPEN_ALWAYS|FA_WRITE);//打开/创建文件
- //mf_open("0:ParticleFile/MeasureData0.txt",FA_OPEN_ALWAYS|FA_WRITE);//打开/创建文件
- fsize=(d-1)*LineMinByte;
- mf_lseek(fsize);
- //mf_puts(dw);
- mf_write(dw,LineMinByte-2);
- mf_write("\r\n",2);
- mf_close();//关闭文件
- //存储行数
- FileStoreLine(n);
- }
复制代码- //读取一串字符串
- //n,读取的指定函数
- //dr,读取一串字符串
- //0,正确
- //1,错误
- u8 FileStoreReadLine(u32 n,u8* dr)
- {
- u32 fsize;
- u32 r_size;//读取的大小
- u16 FileNum=0;
-
- FileNum=n/FileMaxLine;
- n=n%FileMaxLine;
- //文件名
- FileNameArr[26]=FileNum/100+'0';
- FileNameArr[27]=(FileNum/10)%10+'0';
- FileNameArr[28]=(FileNum)%10+'0';
- FileNameArr[29]='.';
- FileNameArr[30]='t';
- FileNameArr[31]='x';
- FileNameArr[32]='t';
- mf_mkdir("0:ParticleFile"); //如果文件夹已经存在,就不创建.如果不存在就创建新的文件夹.
- mf_open((u8*)FileNameArr,FA_OPEN_ALWAYS|FA_READ);//打开/创建文件
- r_size=mf_size();//读取文件大小
- fsize=(n-1)*LineMinByte;
- if(r_size<=fsize)//文件大小小于要读取的尺寸
- {
- mf_close();//关闭文件
- return 1;
- }
-
- //mf_tell();//获取当前指针位置
- mf_lseek(fsize);//移动指针
- //mf_gets(LineMinByte);
- f_gets((TCHAR*)dr,LineMinByte,file);
- //mf_read(LineMinByte);
-
- mf_close();//关闭文件
- return 0;
- }
复制代码
|
最佳答案
查看完整内容[请看2#楼]
指针写法写错了,
1,filename="0articleFile/MeasureData";这步操作会导致指针filename指向字符串。并不是把字符串保存到申请的内存里面。
1,后面在释放内存时,也是等于没有释放,因为指针变量filename所存放的地址不是你申请内存的首地址了。
|