初级会员

- 积分
- 186
- 金钱
- 186
- 注册时间
- 2015-1-22
- 在线时间
- 57 小时
|
20金钱
本帖最后由 leozzd 于 2017-12-5 08:54 编辑
运行的UCOSII,移植了原子哥的FATFS程序,数据能正常一直写入TF卡,只要从TF卡中一读取数据,系统时间的年月日就被更改,求大神们指导下面这段程序……
//////////////////////////////////////////////////////////////////////////////////////////FATFS读写操作////////////////////////////////////////////////////////////////////
FIL TF_File; //声明TF卡文件对象
FRESULT res; //声明TF卡状态返回值
UINT brr, bww; //声明TF卡的读写扇区
char ReadBuf [1024 * 4];
char WFileName[20] = "0:/Log_20160606.txt"; //TF卡创建的文件名称
char RFileName[17] = "Log_20160606.txt";
unsigned char TF_CardFlag = 0;
//函数名称:void TF_WriteCard(void)
//入口参数:NULL
//返回参数:NULL
//修改说明:NULL
void TF_WriteCard(void)
{
unsigned int i = 0;
res=f_open (&TF_File,WFileName, FA_OPEN_ALWAYS | FA_WRITE); //打开文件并写入数据(指向空白文件对象的指针,指向文件名的指针,访问模式和文件打开模式标志)
if(res == FR_OK) //打开文件成功
{
f_lseek(&TF_File,TF_File.fsize); //光标定位到文本末尾
f_printf(&TF_File,"[%d-%02d-%02d %02d:%02d:%02d]<接收到%d个数据>:", //系统当前运行时间,附带写入TF卡
calendar.w_year,
calendar.w_month,
calendar.w_date,
calendar.hour,
calendar.min,
calendar.sec,
Sig_Cnt); //记录串口收到的时间和个数
for(i = 0;i < Sig_Cnt ;i++)
{
f_lseek(&TF_File,TF_File.fsize); //光标定位到文本末尾
f_printf(&TF_File,"%02X ",USART1_RX_BUF); //记录串口收到的数据
}
f_puts("\r\n",&TF_File); //显示过行
TF_CardFlag = 1;
u3_printf("数据已成功写入 \r\n");
}
else
{
TF_CardFlag = 0;
u3_printf("数据写入失败!\r\n");
}
f_close(&TF_File); //关闭文件
}
//函数名称:void TF_ReadCard(unsigned char* DesFile, unsigned char* DesData)
//入口参数:DesFile:目标文件;DesData:目标日志
//返回参数:NULL
//修改说明:NULL
void TF_ReadCard(TCHAR *DesFile)
{
unsigned int filesize = 0;
res=f_open (&TF_File,DesFile, FA_OPEN_EXISTING | FA_READ); //打开文件并读出数据(指向空白文件对象的指针,指向文件名的指针,访问模式和文件打开模式标志)
if(res == FR_OK) //打开文件成功
{
filesize = f_size(&TF_File); //计算文件大小
res = f_read (&TF_File, ReadBuf, 1300, &brr); //读取文件到数组
if(res == FR_OK) //读取文件成功
u3_printf("%s",ReadBuf);
if(f_eof(&TF_File)) //查询是否到达文件末尾
u3_printf("\r\n");
u3_printf("已成功读出%d个数据\r\n",filesize);
}
else
u3_printf("数据读出失败!\r\n");
f_close(&TF_File); //关闭文件
}
//////////////////////////////////////////////////////////////////////////////////////////FATFS读写操作////////////////////////////////////////////////////////////////////
在读取数据的函数中:res = f_read (&TF_File, ReadBuf, 1300, &brr); 测试过程中发现大于1300这个读取个数,就会影响到后续的系统运行日期,而ReadBuf是有4K的空间大小,还不会超过。调试过程发现,ReadBuf和RTC结构体calendar的内存运行地址也很远,不会出现重叠的情况。时间被篡改后,也无法通过指令修改时间,强行写入也不行。
改时间
运行情况图片如下,写入数据时,时间运行正常,也能完整记录进TF卡,一旦从TF卡中读取数据出来,系统运行时间的年月日就开始变化,写入TF卡的时间也跟着改变了
运行情况
写入TF卡情况:
记录数据
|
最佳答案
查看完整内容[请看2#楼]
自己回来结帖吧,字符串打印u3_printf("%s",ReadBuf); 换成字符逐个打印u3_printf("%c",ReadBuf【i】就可以了~~~
|