初级会员

- 积分
- 98
- 金钱
- 98
- 注册时间
- 2016-11-1
- 在线时间
- 50 小时
|
20金钱
在ucos四个任务中进行数据保存操作,在定时器任务中设计了自动保存功能:
void tmr2_callback(void *p_tmr, void *p_arg) 30分钟运行一次
{
OS_ERR err;
CPU_SR_ALLOC();
OS_CRITICAL_ENTER(); 进入临界区
OSTaskSuspend((OS_TCB*)&COM1_TaskTCB,&err); 挂起任务
OSTaskSuspend((OS_TCB*)&COM6_TaskTCB,&err);
OSTaskSuspend((OS_TCB*)&COM3_TaskTCB,&err);
OSTaskSuspend((OS_TCB*)&COM7_TaskTCB,&err);
OSTaskSuspend((OS_TCB*)&TIME_TaskTCB,&err);
f_close(&file1); 关闭文件
f_close(&file6);
f_close(&file3);
f_close(&file7);
f_mount(NULL,"0:",1); 注销工作区
res_sd = f_mount(&fr,"0:",1); 注册工作区
res_sd = f_open(&file1, "0:CTD_data201704.ctd", FA_OPEN_APPEND | FA_WRITE); 打开文件并将指针移动到末尾
res_sd = f_open(&file6, "0:METS_data201704.mets", FA_OPEN_APPEND | FA_WRITE);
res_sd = f_open(&file3, "0:MT_data201704.mt", FA_OPEN_APPEND | FA_WRITE);
res_sd = f_open(&file7, "0:RBR_data201704.rbr", FA_OPEN_APPEND | FA_WRITE);
OSTaskResume((OS_TCB*)&COM1_TaskTCB,&err); 恢复任务
OSTaskResume((OS_TCB*)&COM6_TaskTCB,&err);
OSTaskResume((OS_TCB*)&COM3_TaskTCB,&err);
OSTaskResume((OS_TCB*)&COM7_TaskTCB,&err);
OSTaskResume((OS_TCB*)&TIME_TaskTCB,&err);
OS_CRITICAL_EXIT();
}
使用的参数是最新的FATFS系统f_open的参数
FA_OPEN_APPEND | Same as FA_OPEN_ALWAYS except the read/write pointer is set end of the file. |
出现的问题是:短时间操作文件大小和内容正常,但是在经过长时间后(一晚上拷机),发现四个文件中有一个文件大小异常,而且用notpad++打开提示文件损坏,其余三个正常。请教各位大神是什么原因呢。。。
|
|