天热进来坐坐,我有个问题要问 :)

1 如果U盘文件太大,一次读不完。例如我有4k的xram,一次只能读8扇区; 如果我要读U盘内一个6k大小的文件,那么执行完一次ExecCommandbuf(CMD_FILEREAD, 1, &DATA_BUF)以后,需要再执行一次CMD_FileRead, 而这次就需要在数据缓冲区起始地址处加上已读的扇区长度。 则第二次ExecCommandbuf(CMD_FileRead, 1, &DATA_BUF+8*512),执行写文件也一样要加上已写的长度。 9寸钉你上次给我说不用改动ExecCommandBuf中的参数 &DATA_BUF, 错了哦, 我看了示例程序,里面都加上了。我应该没错吧

2 CMD_FileModify这个命令应用我真没搞清楚。 mCmdParam.Modify.mFileAttr = 0xff; /* 输入参数: 新的文件属性,为0FFH则不修改 */ mCmdParam.Modify.mFileTime = 0xffff; /* 输入参数: 新的文件时间,为0FFFFH则不修改,使用新建文件产生的默认时间 */ mCmdParam.Modify.mFileDate = ( (2005-1980)<<9 ) + ( 7<<5 ) + 05; /* 输入参数: 新的文件日期: 2004.05.18 */ mCmdParam.Modify.mFileSize = NewSize; /* 输入参数: 如果原文件较小,那么新的文件长度与原文件一样长,否则被RAM所限 */ i = ExecCommand( CMD_FileModify, 4+2+2+1 ); /* 修改当前文件的信息,修改日期和长度,参数长度为sizeof(mCmdParam.Modify.mFileSize)+... */ 其中EXECCOMMAND命令中的参数长度为什么是4+2+2+1呢? 另外,比如我现在要往U盘内写一个10k大小的文件,而我的xram只有4k大, 那么根据上面说明的来操作的话,mCmdParam.Modify.mFileSize = 4k, 文件长度被限制在4k, 我该怎么做呢?

1,你的缓冲区总共才4K,在第一次读完数据后,第二次你要把缓冲区地址指定到 &DATA_BUF+8*512,那你让它数据往哪存啊?例子程序里是将缓冲区数据分两次写,那第二次,写时,缓冲区地址当然要指定到后面,如果你的缓冲区是8K,那么如果你愿意将你的6K数据分两次写(每次4K)的话,第二次,就 应该是 &DATA_BUF+8*512. 2,0xff 0xffff 0xffff 0xffffffff 分别代表以上4个参数,那参数长度是不是 4+2+2+1 个字节啊! 写10K,的话,分3次写,4K数据->缓冲区,写,4K数据->缓冲区,写,2K数据->缓冲区,写,..哦..注意..不要将地址指向&DATA_BUF+8*512,..


只有登录才能回复,可以选择微信账号登录