【RISC-V MCU CH32V103测评】U盘读写功能的再解读

jennyzhaojie   2021-3-12 22:14 楼主

上次已对U盘的读写功能做了一定的介绍,但还不太全面,故这次再做些补充说明。

之所以不很全面是和程序处理的流程及程序内容相关的,为便于说明这里给出处理的流程图,见图1所示。

1.jpg 图1 U盘读写流程图

 

上次我们只沿着左侧的分支进行了介绍,那右侧分支呢?

它则是在原有文件的基础上进行内容的追加,然后再显示出文件的前100个字节,其执行效果如图2所示。

2.jpg 图2 追加内容的处理效果

 

那读取的前100个字节又显示在何处呢?

其实并没有任何内容被显示出来,之所以如此是与程序的内容相关的,随着操作的进行此时文件的指针已被移动到了文件的末尾,自然是没有内容可读出的,也就没有任何的内容可供显示。

那此时该添加如何的操作呢?

当然是修改文件指针,这又有2种方法可以达到目的,其一是先关闭文件,然后再打开文件,则文件指针就自然换到文件的首部;另一种方法则是无需关闭文件,只用相应的函数就能把文件指针移动到所需的位置。

第一种方法所用的语句为:

i = CHRV3FileClose( );

mStopIfError( i );

strcpy( (PCHAR)mCmdParam.Open.mPathName, "/C51/NEWFILE.C" );     //设置将要操作的文件路径和文件名/C51/NEWFILE.C

s = CHRV3FileOpen( );

第二种方法所用的语句为:

mCmdParam.ByteLocate.mByteOffset = 0x0;  //移到文件的头部

CHRV3ByteLocate( );

 

其执行的效果则如图3所示,由于其中涉及汉字的读取会出现因读取而导致的异常现象。

3.jpg 图3读取汉字的显示效果

 

4.jpg 图4 读取字符的显示效果

 

5.jpg 图5 追加内容后的结果

 

6.jpg 图6  U盘读取实物连接图

本帖最后由 jennyzhaojie 于 2021-3-12 22:21 编辑

回复评论 (7)

先关闭文件,然后再打开文件,指针就到文件的首部,这个方法容易操作

不关闭文件,把文件指针移动到所需的位置,这个不好理解

点赞  2021-3-12 22:57

两种方法都因为汉字的原因,出现异常吗

 

点赞  2021-3-12 22:58
Jacktang 发表于 2021-3-12 22:58 两种方法都因为汉字的原因,出现异常吗  

与方法不相关,主因是汉字是双字节编码,当截取汉字的一个字节显示时就会出现异常,而截取的是2个字节时则没事。所以与读取时截取的位置有关,而字符是单字节的,所以无论怎样截取只要以字节为单位就没问题。

本帖最后由 jennyzhaojie 于 2021-3-12 23:29 编辑
点赞  2021-3-12 23:27
引用: Jacktang 发表于 2021-3-12 22:58 两种方法都因为汉字的原因,出现异常吗  

所说的2种方法是解决文件指针移动的问题,而出现异常是与读取时截取的位置有关(对汉字而言,不涉及字符。)

点赞  2021-3-12 23:32

如果你仔细数的话,会说显示的字符数也不是100个,其实这要从程序看,因在程序中使用了换行符等,故字节数到了100,而换行符等是看不见的,但它也占用读取的字节数。

点赞  2021-3-12 23:38
引用: jennyzhaojie 发表于 2021-3-12 23:38 如果你仔细数的话,会说显示的字符数也不是100个,其实这要从程序看,因在程序中使用了换行符等,故字节数 ...

原来这样

谢谢分享

点赞  2021-3-13 07:38
引用: Jacktang 发表于 2021-3-13 07:38 原来这样 谢谢分享

点赞  2021-3-13 09:10
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复
      缈昏瘧锛