MQX 读写U盘
来源:互联网 发布:苹果电脑设计软件免费 编辑:程序博客网 时间:2024/06/13 00:46
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 20151009Udisk_Demo_Test();_lwsem_post(&USB_Stick);break;
/*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<strlen(buffer);bi++) printf("%c",buffer2[bi]); fclose(fd); // 再次打开test1.txt 并向其中写数据,然后读出 fd = fopen("a:test1.txt", "a+"); if (fd == NULL) { printf("Error opening the MFS file!"); _mqx_exit(1); } write(fd, "Bejing", 6); fseek(fd, 0, IO_SEEK_SET); read(fd, buffer3, strlen(buffer)+6); printf("\r\n"); for(bi=0;bi<(strlen(buffer)+6);bi++) printf("%c",buffer3[bi]); fclose(fd); }
需要注意的是:
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 */
它用来改变位置指针,注意第一个参数文件指针的区别。
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
- MQX 读写U盘
- U盘读写基础知识
- U盘读写模块 单片机读写U盘
- Mac U盘读写问题
- 51单片机读写U盘 430单片机读写U盘 U盘读写设备
- 单片机控制U盘 单片机读写U盘 高速U盘读写模块
- 单片机读写U盘的模块 USB118
- 读写U盘(FAT32)引导扇区
- 如何让单片机轻松读写U盘
- ZedBoard学习(3)U盘读写
- 如何加快U盘读写速度
- IPad读写U盘的解决方案
- 读写U盘(FAT32)引导扇区
- STM32F107 USB otg U盘读写
- linux之U盘读写速度测试
- android 识别U盘以及读写文件
- 读写U盘(FAT32)引导扇区
- Android OTG-U盘文件读写
- 数据库索引失效的原因
- 网易互联网部门2016年校园招聘笔试
- 游戏编程日记
- Node.js 本地版本控制
- 进程与线程的一个简单解释
- MQX 读写U盘
- 简单图书馆
- HDU3395(最大权匹配)
- 软件测试管理的基本要素
- hadoop进入和退出安全模式
- codevs月赛 奶牛的身高
- 《剑指Offer》面试题:三组对面和分别相等的正方体
- Apache服务器的安装与配置
- PostgreSQL的JDBC访问