FATFS檔案系統讀寫案例,親測有效
自己 本來想寫一個stm32移植FATFS檔案系統進行存取資料
但網上能夠參照的執行個體,實在太少,而且出現的問題還挺多
于是花費了很長一段時間才将讀寫問題解決
希望能夠對一些想要進行FATFS的操作的小夥伴有一定的幫助
代碼如下
FIL fw;
FRESULT res;
struct Struct_Pack Pack_Fram[5] = {'0',"----",'1',"----",'2',"----",'3',"----",'4',"----"};
void CreatPackFile(struct Struct_Pack *dat)
{
u8 i = 0,j = 0;
UINT br;
char p[1024];
printf("Strart");
res = f_open(file,"0:pack.txt",FA_OPEN_ALWAYS | FA_READ | FA_WRITE);
if(res == FR_OK)
{
printf("OK");
//指針往後移
f_lseek(file,0);
//擷取資料
res = f_read(file,p,sizeof(p),&br);
if(res == FR_OK)
{
if(p[0] != '\0')
{
for(i = 0; i < 5; i++)
{
dat[i].num = p[i * 5];
for(j = 0; j < 5; j++)
{
dat[i].getNum[j] = p[i * 5 + j + 1];
}
}
}
}
f_close(file);
}
else
{
printf("Err");
}
}
void SavaData(struct Struct_Pack *dat)
{
UINT bw;
char write_buff[1024];
u8 i,j;
for(i = 0; i < 5; i++)
{
write_buff[i * 5] = dat[i].num;
for(j = 0; j < 5; j++)
{
write_buff[i * 5 + j + 1] = dat[i].getNum[j];
}
}
write_buff[25] = '\0';
res = f_open(&fw,"0:pack.txt",FA_OPEN_EXISTING | FA_READ | FA_WRITE);
if(res == FR_OK)
{
f_lseek(&fw,0);
res = f_write(&fw,write_buff,sizeof(write_buff),&bw);
if(res == FR_OK)
{
printf("儲存成功\r\n");
}
else
{
printf("儲存失敗%d\r\n",res);
}
f_close(&fw);
}
else
{
printf("打開失敗\r\n");
}
}
最後強調兩個問題
讀寫緩沖區read_buffer write_buffer不要随意設定(否則檔案必讀寫不了)
FIL要一定設定成全局變量(否則程式必跑飛)