近日对于SD卡移植FatFs文件系统(版本R0.12b),进行文件系统挂、文件写入、文件读取测试时,发现在文件写入之后关闭文件会卡死在f_close()函数中,没有返回值,再次复位时会挂载文件系统失败(FR_NOT_READY)。使用野火的例程也出现同样问题。调用函数流程大致为f_mount->f_open()->f_close->f_open()->f_close->f_mount。
摘自野火例程《SDIO—FatFs移植与读写测试》
/*----------------------- 文件系统测试:写测试 -----------------------------*/
/* 打开文件,如果文件不存在则创建它 */
printf("\r\n****** 即将进行文件写入测试... ******\r\n");
res_sd = f_open(&fnew, "0:FatFs读写测试文件.txt",FA_CREATE_ALWAYS | FA_WRITE ); //后来发现是FA_CREATE_ALWAYS参数出现问题
if ( res_sd == FR_OK )
{
printf("》打开/创建FatFs读写测试文件.txt文件成功,向文件写入数据。\r\n");
/* 将指定存储区内容写入到文件内 */
res_sd=f_write(&fnew,WriteBuffer,sizeof(WriteBuffer),&fnum);
if(res_sd==FR_OK)
{
printf("》文件写入成功,写入字节数据:%d\n",fnum);
printf("》向文件写入的数据为:\r\n%s\r\n",WriteBuffer);
}
else
{
printf("!!文件写入失败:(%d)\n",res_sd);
}
/* 不再读写,关闭文件 */
f_close(&fnew); //卡死在这里!!!!!
}
else
{
LED_RED;
printf("!!打开/创建文件失败。\r\n");
} |