微吼云上線多路互動直播服務 加速多場景互動直播落地
943
2025-04-02
MQX操作系統具有完整的USB協議棧和MFS文件系統。其本身帶有操作U盤的例子。
以FRDM_K64F+Freescale_MQX_4_1_FRDMK64F為例
在C:\Freescale\Freescale_MQX_4_1_FRDMK64F\mfs\examples\mfs_usb目錄里有例子。這個例子里用到了shell,有的客戶不希望使用shell,而單獨能夠在u盤中建立文件(fat32格式)、讀寫文件。那么該如何操作呢?
在usb_task.c 文件的USB_task()函數中,我增加了一個函數Udisk_Demo_Test()用來單獨實現直接對U盤進行讀寫操作。
case USB_INTF_EVENT: /* Installs USB device. If no partitions found, installs MFS over whole device. */ dev_data = (MSD_DEV_DATA_PTR)msg.ccs_ptr; usb_msd_install(dev_data, &fs_mountp); /* Unlock the USB_Stick = signal to the application as available */ // added by wenxue 20151009 Udisk_Demo_Test(); _lwsem_post(&USB_Stick); break;
1
2
3
4
5
6
7
8
9
10
/*FUNCTION*---------------------------------------------------------------- * * Function Name : Udisk_Demo_Test * Returned Value : * Comments : Test U disk * *END*--------------------------------------------------------------------*/ int Udisk_Demo_Test(void) { MQX_FILE_PTR fd = NULL; _mqx_int c; _mqx_int bi; char buffer[100] = "This a test file!"; char buffer2[100]; char buffer3[100]; // 讀U盤里現成的文件wenxue.txt,讀取內容并打印輸出 fd = fopen("a:wenxue.txt", "r"); if (fd == NULL) { printf("Error opening the MFS device driver!"); _mqx_exit(1); } if (fd ) { do { c = fgetc(fd); if (c!= IO_EOF) { fputc((char)c, stdout); } } while (c!=IO_EOF); } fclose(fd); //讀取test1.txt,由于原先不存在該文件,會創建它,并寫入數據,然后讀出來 fd = fopen("a:test1.txt", "a+"); if (fd == NULL) { printf("Error opening the MFS file!"); _mqx_exit(1); } write(fd, buffer, strlen(buffer)); fseek(fd, 0, IO_SEEK_SET); read(fd, buffer2, strlen(buffer)); printf("\r\n"); for(bi=0;bi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 需要注意的是: 1)fopen的第二個參數如下: 2)調用write函數之后,如果通過read函數讀取文件中的數據,需要調用fseek函數,fseek的第三個參數如下 /* * Seek parameters */ #define IO_SEEK_SET (1) /* Seek from start */ #define IO_SEEK_CUR (2) /* Seek from current location */ #define IO_SEEK_END (3) /* Seek from end */ 1 2 3 4 5 6 它用來改變位置指針,注意第一個參數文件指針的區別。 fseek 原型:int fseek(FILE *stream, long offset, int fromwhere); 功能:重定位流(數據流/文件)上的文件內部位置指針 注意:不是定位文件指針(文件指針是 FILE * fp 這樣的),文件指針指向文件/流。位置指針指向文件內部的字節位置,隨著文件的讀取會移動,文件指針如果不重新賦值將不會改變指向別的文件。 第一個參數stream為文件指針 第二個參數offset為偏移量,正數表示正向偏移,負數表示負向偏移 第三個參數origin設定從文件的哪里開始偏移 在網上看到一篇關于C語言文件的blog,寫的很好: http://www.cnblogs.com/L-hq815/archive/2012/06/30/2571066.html 同事Jicheng,寫了一篇關于KL25/26讀寫U盤的Blog: http://blog.chinaaet.com/jihceng0622/p/38978 C語言中各函數的解釋:http://www.51testing.com/html/71/410671-818629.html Shell
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。