求助 376 的指针问题

程序是对u盘里某个地址进行写 但指针所指地址不正确 谢谢高手指点帮忙 UINT32 offset=0;

主函数调用CH376ByteLocate( 10 ) CH376ByteLocate( UINT32 offset ) /* 以字节为单位移动当前文件指针 */ { xWriteCH376Cmd( 0x39 ); xWriteCH376Data( (UINT8)offset ); xWriteCH376Data( (UINT8)((UINT16)offset>>8) ); xWriteCH376Data( (UINT8)(offset>>16) ); xWriteCH376Data( (UINT8)(offset>>24) ); CH376_SPI_SCS = 1;

}

CH376ByteLocate用于打开文件后,定位文件指针,以字节为单位 您具体想做什么用途?


你所说的对U盘的某个地址进行写,是对文件操作,还是扇区操作,该函数只能对文件操作。


目的是在文件里 某地址读取一个字节或更改一个字节的数据 是对文件操作


是在打开文件后调用的 能写进去 写进去的数据位置不正确


这个用途的话,CH376ByteLocate是可以实现的,下载CH376EVT.ZIP,其中CH376EVT.PDF的“4.4. 文件读写的参考步骤”有相关应用解释


部分主程序:CH376_SPI_SCS = 0; xWriteCH376Cmd(0x2F); CH376SetFileName( "WW.TXT\0" ); mDelay50mS( ); xWriteCH376Cmd(0x32);//打开文件指令

mDelay50mS( ); CH376_SPI_SCS = 1; if(CH376_SPI_SDO==0) { CH376_SPI_SCS = 0; xWriteCH376Cmd(0x22); mDelay50mS( ); kai=xReadCH376Data( );//如果成功打开文件返回 0X14; len =128; CH376ByteLocate( 99 ) ; CH376_SPI_SCS = 0; xWriteCH376Cmd(0X3c);//0X3c //以字节形式写 xWriteCH376Data((UINT8)len); xWriteCH376Data((UINT8)(len>>8));


1、强烈建议不要自行直接向CH376发送命令实现文件操作,编写好硬件层接口后,调用我们的提供的库程序:如,CH376FileOpen、CH376FByteRead之类,因为有些命令的操作流程比较复杂,并非简单发送命令就可以的 硬件层接口:PARA_HW.C、PARA_SW.C、、SPI_HW.C、SPI_SW.C、UART_HW.C就是硬件接口,按照你的硬件定义修改,参考CH376EVT.PDF中的“5.2. 硬件I/O接口子程序” 2、你要实现的功能: s = CH376FileOpenPath("\\1.TXT" ); /* 打开文件,该文件在C51子目录下 */ if( s == USB_INT_SUCCESS ) { s = CH376ByteLocate( 2 ); /* 以字节为单位移动当前文件指针,2个字节 */ if( s == USB_INT_SUCCESS ) { s = CH376ByteRead( buf, sizeof( buf ), &ThisLen ); /* 以字节为单位从当前位置读取数据块,请求长度同缓冲区大小,返回实际长度在ThisLen中 */ } } 这就打开文件后,移动2个字节后再开始读文件,参考我们的例程,很容易实现你的功能


(2)CH376_SPI_SCS = 0/1;一般这属于硬件接口层的操作,不要把底层的操作和应用层的操作混到一起. (1)CH376EVT中有FILE_SYS.C中提供了相关很多功能函数包括了CH376ByteLocate(),你可以直接去调用.仔细体会下CH376EVT下的示例程序!


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