完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
用CH376S创建长文件名文件时,根据EXAM11例程创建文件,发现返回的数值是0x41,在电脑中查看U盘文件,短文件名文件有创建,长文件名没有创建,还有想知道这个短文件名和长文件名之间有什么对应关系吗,还是随意命名一个短文件名和长文件名都可以,劳烦求教
s = CH376CreateLongName( "/LONGNAME.H", LongNameBuf ); |
|
相关推荐
9个回答
|
|
创建出来的文件特别大,2.6G,文件名有乱码,想创建"20211009_LonGgFileName.HCD"这个文件名,求解答
|
|
|
|
您好,报错0x41表示您的短文件名文件已经被打开过,您确认一下这个返回值错误是否为创建文件后出现的。还是后面CH376GetLongName函数返回的错误,创建长文件的完整CH32F103工程,这边已经邮件回复您了,您可以根据工程做代码移植即可。
|
|
|
|
您好,我根据您发给我的CH32例程移植,发现创建出来的只显示短文件名文件,而且文件大小很大,这是怎么回事
|
|
|
|
您基于我那个代码移植的话,先不要修改内容,最终效果试出现一个This is a long name txt.TXT。您移植先完成这个在说后面修改为您自己的所需的长文件名。
|
|
|
|
您好,按照例程的话,创建不出来,在U盘上只能看见短文件名文件,现在发现好像要是13倍数的字符(比如26,39个字符)的文件名才能创建成功,但是第13个字符是乱码,并且创建的文件大小一样大,2.67G,像我发的图片那样
|
|
|
|
|
|
|
|
您好,如果你是直接使用我发给您的例程也出现的这个问题,您可以打印看一下报错信息,看是否是执行到某一步的时候,有错误返回。
|
|
|
|
您好,感谢您的回复!这是我打印出来的信息,看这个的话有创建成功,但是从PC机上看U盘里只有短文件名文件 程序: UINT8CH376CreateLongName( PUINT8 PathName, PUINT8 LongName ) { UINT8s, i; UINT8DirBlockCnt; UINT16count; UINT16NameCount; UINT32NewFileLoc; for ( count = 0; count < LONG_NAME_BUF_LEN; count += 2 ) if ( *(PUINT16)(&LongName[count]) == 0 ) break; if ( count == 0 || count >= LONG_NAME_BUF_LEN || count > LONE_NAME_MAX_CHAR ) return( ERR_LONG_NAME_ERR ); DirBlockCnt = count / LONG_NAME_PER_DIR; i = count - DirBlockCnt * LONG_NAME_PER_DIR; if ( i ) { if ( ++ DirBlockCnt * LONG_NAME_PER_DIR > LONG_NAME_BUF_LEN ) return( ERR_LONG_BUF_OVER ); count += 2; i += 2; if ( i < LONG_NAME_PER_DIR ) { while ( i++ < LONG_NAME_PER_DIR ) LongName[count++] = 0xFF; } } s = CH376FileOpenPath( PathName ); printf("1 s = %Xrn", s); if ( s == USB_INT_SUCCESS ) { s = ERR_NAME_EXIST; goto CH376CreateLongNameE; } if ( s != ERR_MISS_FILE ) return( s ); s = CH376FileCreatePath( PathName ); printf("2 s = %Xrn", s); if ( s != USB_INT_SUCCESS ) return( s ); i = CH376ReadVar8( VAR_FILE_DIR_INDEX ); s = CH376LocateInUpDir( PathName ); printf("3 s = %Xrn", s); if ( s != USB_INT_SUCCESS ) goto CH376CreateLongNameE; NewFileLoc = CH376ReadVar32( VAR_CURRENT_OFFSET ) + i * sizeof(FAT_DIR_INFO); s = CH376ByteLocate( NewFileLoc ); printf("4 s = %Xrn", s); if ( s != USB_INT_SUCCESS ) goto CH376CreateLongNameE; s = CH376ByteRead( &GlobalBuf[ sizeof(FAT_DIR_INFO) ], sizeof(FAT_DIR_INFO), NULL ); printf("5 s = %Xrn", s); if ( s != USB_INT_SUCCESS ) goto CH376CreateLongNameE; for ( i = DirBlockCnt; i != 0; -- i ) { s = CH376ByteRead( GlobalBuf, sizeof(FAT_DIR_INFO), &count ); printf("6 s = %Xrn", s); if ( s != USB_INT_SUCCESS ) goto CH376CreateLongNameE; if ( count == 0 ) break; if ( GlobalBuf[0] && GlobalBuf[0] != 0xE5 ) { s = CH376ByteLocate( NewFileLoc ); printf("7 s = %Xrn", s); if ( s != USB_INT_SUCCESS ) goto CH376CreateLongNameE; GlobalBuf[ 0 ] = 0xE5; for ( s = 1; s != sizeof(FAT_DIR_INFO); s ++ ) GlobalBuf[ s ] = GlobalBuf[ sizeof(FAT_DIR_INFO) + s ]; s = CH376LongNameWrite( GlobalBuf, sizeof(FAT_DIR_INFO) ); printf("8 s = %Xrn", s); if ( s != USB_INT_SUCCESS ) goto CH376CreateLongNameE; do { s = CH376ByteRead( GlobalBuf, sizeof(FAT_DIR_INFO), &count ); printf("9 s = %Xrn", s); if ( s != USB_INT_SUCCESS ) goto CH376CreateLongNameE; } while ( count && GlobalBuf[0] ); NewFileLoc = CH376ReadVar32( VAR_CURRENT_OFFSET ); i = DirBlockCnt + 1; if ( count == 0 ) break; NewFileLoc -= sizeof(FAT_DIR_INFO); } } printf("i = %drn", i); if ( i ) { s = CH376ReadVar8( VAR_SEC_PER_CLUS ); printf("10 s = %drn", s); if ( s == 128 ) { s = ERR_FDT_OVER; goto CH376CreateLongNameE; } count = s * DEF_SECTOR_SIZE; if ( count < i * sizeof(FAT_DIR_INFO) ) count <<= 1; s = CH376LongNameWrite( NULL, count ); printf("11 s = %drn", s); if ( s != USB_INT_SUCCESS ) goto CH376CreateLongNameE; } s = CH376ByteLocate( NewFileLoc ); printf("12 s = %Xrn", s); if ( s != USB_INT_SUCCESS ) goto CH376CreateLongNameE; GlobalBuf[11] = ATTR_LONG_NAME; GlobalBuf[12] = 0x00; GlobalBuf[13] = CH376CheckNameSum( &GlobalBuf[ sizeof(FAT_DIR_INFO) ] ); GlobalBuf[26] = 0x00; GlobalBuf[27] = 0x00; printf("GlobalBuf[11] = %X, GlobalBuf[13] = %X, DirBlockCnt = %drn", GlobalBuf[11], GlobalBuf[13], DirBlockCnt); for ( s = 0; DirBlockCnt != 0; ) { GlobalBuf[0] = s ? DirBlockCnt : DirBlockCnt | 0x40; printf("GlobalBuf[0] = %Xrn", GlobalBuf[0]); DirBlockCnt --; NameCount = DirBlockCnt * LONG_NAME_PER_DIR; printf("NameCount = %d, sizeof(FAT_DIR_INFO) = %drn", NameCount, sizeof(FAT_DIR_INFO)); for ( s = 1; s < sizeof( FAT_DIR_INFO ); s += 2 ) { if ( s == 1 + 5 * 2 ) s = 14; else if ( s == 14 + 6 * 2 ) s = 28; GlobalBuf[ s ] = LongName[ NameCount++ ]; GlobalBuf[ s + 1 ] = LongName[ NameCount++ ]; } for(i = 0; i < sizeof(FAT_DIR_INFO); i++) { printf("%X ", GlobalBuf); } printf("rn"); s = CH376LongNameWrite( GlobalBuf, sizeof(FAT_DIR_INFO) ); printf("13 s = %Xrn", s); if ( s != USB_INT_SUCCESS ) goto CH376CreateLongNameE; } s = CH376LongNameWrite( &GlobalBuf[ sizeof(FAT_DIR_INFO) ], sizeof(FAT_DIR_INFO) ); printf("14 s = %Xrn", s); CH376CreateLongNameE: CH376FileClose( FALSE ); return( s ); } l劳烦帮我再看下 |
|
|
|
您好,您复制的这段是File_SYS.C里面的驱动代码,这部分是不需要进行修改的,直接使用官方EVT里的内容即可。主要修改的地方是在主程序while(1)里面的代码。看您的打印,短文件名和长文件名的文件格式是不一样的。您可以先用TXT文本试一下,只修改文件名称,不修改文件格式。看看电脑是否正常显示。
|
|
|
|
只有小组成员才能发言,加入小组>>
342 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2803 浏览 2 评论
2300 浏览 1 评论
使用ch569例程中的CH372Device程序,修改电脑端程序的读写端口时卡住了是什么原因?
344浏览 2评论
求助,CH368L的被动接口有没有详细的读写时序以及操作流程说明
741浏览 2评论
849浏览 2评论
916浏览 2评论
541浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-28 21:42 , Processed in 0.963852 second(s), Total 63, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号