在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_APPENDSame as FA_OPEN_ALWAYS except the read/write pointer is set end of the file.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>