jennyzhaojie 发表于 2021-3-12 22:14

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

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

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

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

<p>图1 U盘读写流程图</p>

<p>&nbsp;</p>

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

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

<p>图2 追加内容的处理效果</p>

<p>&nbsp;</p>

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

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

<p>那此时该添加如何的操作呢?</p>

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

<p>第一种方法所用的语句为:</p>

<p>i = CHRV3FileClose( );</p>

<p>mStopIfError( i );</p>

<p>strcpy( (PCHAR)mCmdParam.Open.mPathName, &quot;/C51/NEWFILE.C&quot; );&nbsp;&nbsp;&nbsp;&nbsp; //设置将要操作的文件路径和文件名/C51/NEWFILE.C</p>

<p>s = CHRV3FileOpen( );</p>

<p>第二种方法所用的语句为:</p>

<p>mCmdParam.ByteLocate.mByteOffset = 0x0;&nbsp; //移到文件的头部</p>

<p>CHRV3ByteLocate( );</p>

<p>&nbsp;</p>

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

<p>图3读取汉字的显示效果</p>

<p>&nbsp;</p>

<p>图4 读取字符的显示效果</p>

<p>&nbsp;</p>

<p>图5 追加内容后的结果</p>

<p>&nbsp;</p>

<p>图6 &nbsp;U盘读取实物连接图</p>

Jacktang 发表于 2021-3-12 22:57

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

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

Jacktang 发表于 2021-3-12 22:58

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

<p>&nbsp;</p>

jennyzhaojie 发表于 2021-3-12 23:27

本帖最后由 jennyzhaojie 于 2021-3-12 23:29 编辑

<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&amp;goto=findpost&amp;pid=3047677&amp;ptid=1159192" target="_blank"><font color="#999999">Jacktang 发表于 2021-3-12 22:58</font></a></font> 两种方法都因为汉字的原因,出现异常吗 &nbsp;</blockquote>
</div>

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

jennyzhaojie 发表于 2021-3-12 23:32

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

&nbsp;

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

jennyzhaojie 发表于 2021-3-12 23:38

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

Jacktang 发表于 2021-3-13 07:38

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

<p>原来这样</p>

<p>谢谢分享</p>

jennyzhaojie 发表于 2021-3-13 09:10

Jacktang 发表于 2021-3-13 07:38
原来这样

谢谢分享

<p><img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/handshake.gif" width="48" /></p>
页: [1]
查看完整版本: 【RISC-V MCU CH32V103测评】U盘读写功能的再解读