logo

请问一下CH376T SET_FILE_SIZE指令问题

使用SET_FILE_SIZE命令时,不能设置文件大小。


使用信息:

芯片:CH376T  版本V4.4


由于官方库没有提供这一指令的实现函数,函数是自己编写的。

void CH376SetFileSize( UINT32 size )  /* 读取当前文件长度 */

{

  xWriteCH376Cmd( CMD50_SET_FILE_SIZE );

xWriteCH376Data( 0x68 );  /* head */

        

        xWriteCH376Data( (UINT8)(size & 0xff) );  /* 长度,低位在前 */

        xWriteCH376Data( (UINT8)((size > 8) & 0xff) );

        xWriteCH376Data( (UINT8)((size > 16) & 0xff) );

        xWriteCH376Data( (UINT8)((size > 24) & 0xff) );


        xEndCH376Cmd( );

}


指令函数使用:

CH376SetFileSize(0x60000);

s = CH376FileClose( TRUE );  /* 关闭文件 */ //(也使用过FALSE)


然后重新打开该文件,使用GET_FILE_SIZE读取文件大小,并printf。

offset = CH376GetFileSize();

printf( "offset = %x\n",(UINT16)offset );


最后结果是,SET_FILE_SIZE指令并不能实现文件大小更改,请问一下为什么?谢谢。


这人很懒,什么都没留下
热门产品推荐 : 8位增强型多接口单片机CH549

跟进:使用库自带的写文件系统变量命令CH376WriteVar32也不行(因为函数实际上是一样的)

这人很懒,什么都没留下

你好:
使用 CH376SetFileSize 只是刷新 CH376内存中的数据长度,并没有真正写入U盘中,需要进行文件保存。
文件保存的方法建议:

步骤1. CH376FileClose( TRUE );或调用写文件函数,写入0长度数据;
步骤2. 执行一次底层传输(例如打开某个文件/目录,读写文件,创建/删除文件等);这步对某些U盘是可选操作,建议加上。

另外,问下,你这个文件长度相对于实际写入数据是变大还是减小啊?




@3楼,您好:

  1. 步骤一我有使用到,但也是没有效果,文件大小并没有被改动,但我并没有测试步骤2

  2. 新的文件长度相对于实际是增大的,因为我是想创建一个文件后,将文件指针移动到后面指定位置再进行写入。

  3. 后面我也使用过直接修改系统信息(用修改日期的那个方法),但是设置之后,在PC中显示的大小是正确的,但是不能打开文件,显示已经损坏。(这种情况存在于设置大小>0x1000,偏移比较小的话就基本上可以实现,太大的话文件才会错误)

  4. 为了解决我实际的需求,我后面的做法是新建文件后,直接全部填0,然后再重新写入我自己的数据,这样可以实现。

  5. 后续我会按照3楼提供的步骤二重新测试一下。谢谢

这人很懒,什么都没留下
只有登录才能回复,可以选择微信和github账号登录