FATFS可以在PC上模擬,是利用記憶體做的一個Disk,但創造後是空的,難以做其他實驗。所以新增二個指令可以將檔案搬進Fatfs系統及搬出Fatfs系統。
搬入指令fy,程式碼如下:
case 'y' : /* fy <src_name> <dst_name> - Copy a file from PC*/
while (*ptr == ' ') ptr++;
ptr2 = _tcschr(ptr, ' ');
if (!ptr2) break;
*ptr2++ = 0;
while (*ptr2 == ' ') ptr2++;
_tprintf(_T("Opening PC file \"%s\""), ptr);
fp = fopen(ptr,"rb");
_tprintf(_T("\n"));
if (!fp) {
_tprintf(_T("Open Fail!\n"));
break;
}
while (*ptr2 == ' ') ptr2++;
_tprintf(_T("Creating \"%s\""), ptr2);
res = f_open(&file[1], ptr2, FA_CREATE_ALWAYS | FA_WRITE);
_tprintf(_T("\n"));
if (res) {
put_rc(res);
f_close(&file[0]);
break;
}
_tprintf(_T("Copying..."));
p1 = 0;
for (;;) {
s1 = fread(Buff, 1, sizeof Buff, fp);
if (s1 == 0) break; /* error or eof */
res = f_write(&file[1], Buff, s1, &s2);
p1 += s2;
if (res || s2 < s1) break; /* error or disk full */
}
_tprintf(_T("\n"));
if (res) put_rc(res);
fclose(fp);
f_close(&file[1]);
_tprintf(_T("%lu bytes copied.\n"), p1);
break;
搬出指令fz,程式碼如下:
case 'z' : /* fz <src_name> <dst_name> - Copy a file to PC*/
while (*ptr == ' ') ptr++;
ptr2 = _tcschr(ptr, ' ');
if (!ptr2) break;
*ptr2++ = 0;
while (*ptr2 == ' ') ptr2++;
_tprintf(_T("Opening \"%s\""), ptr);
res = f_open(&file[0], ptr, FA_OPEN_EXISTING | FA_READ);
_tprintf(_T("\n"));
if (res) {
put_rc(res);
break;
}
while (*ptr2 == ' ') ptr2++;
_tprintf(_T("Creating PC file \"%s\""), ptr2);
fp = fopen(ptr2,"wb");
_tprintf(_T("\n"));
if (!fp) {
_tprintf(_T("Open Fail!\n"));
break;
}
_tprintf(_T("Copying..."));
p1 = 0;
for (;;) {
res = f_read(&file[0], Buff, sizeof Buff, &s1);
if (res || s1 == 0) break; /* error or eof */
s2 = fwrite(Buff, 1, s1,fp);
p1 += s2;
if (s2 < s1) break; /* error or disk full */
}
_tprintf(_T("\n"));
if (res) put_rc(res);
f_close(&file[0]);
fclose(fp);
_tprintf(_T("%lu bytes copied.\n"), p1);
break;
程式基礎是從fx指令改出來的。
沒有留言:
張貼留言