天天看點

FATFS檔案系統讀寫案例

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要一定設定成全局變量(否則程式必跑飛)

繼續閱讀