jinglixixi 发表于 2024-1-11 19:18

【 STM32MP135F-DK测评】文件读写功能及数据提取

本帖最后由 jinglixixi 于 2024-1-15 20:10 编辑

<p>在绣花机的仿真系统中,涉及到花样文件的读取及参数的提取,若是在裸机系统这项工作是比较费事的,它关系到文件系统的管理,文件的读写的多方面的内容。</p>

<p>但在LINUX系统下,处理这样的问题要简单了许多。</p>

<p>为此,就在STM32MP135F-DK测评板的LINUX系统下对文件的功能加以测试和体验。</p>

<p>1)读取文件</p>

<p>待读取的文件如图1所示,读取文件的程序如图2所示。在程序执行后,其结果如图3所示。</p>

<p> &nbsp;</p>

<p>图1 文件内容</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>图2 程序内容</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>图3 执行结果</p>

<p>&nbsp;</p>

<p>在程序中,所使用的语句其作用如下:</p>

<p>(1)open()函数,其作用是打开文件并返回文件对象,它通常用有两个参数。其第一个参数是一个标识文件名的字符串,第二个参数是由有限的字母组成的字符串,用于描述文件将会被如何使用,即工作模式。</p>

<p>其可选的工作模式有:&#39;r&#39;表示只对文件进行读取;&#39;w&#39;,表示只对文件进行写人,该操作会使原有文件被覆盖;&#39;a&#39;表示以追加方式打开文件;&#39;r+&#39;表示以读写方式打开文件。</p>

<p>(2)函数f.readline(),其作用是从文件中读取一行内容,字符串结尾会自动加上一个换行符( \n ),只有当文件最后一行没有以换行符结尾时,这一操作才会被忽略。这样返回值就不会被混淆,如果如果 f.readline() 返回一个空字符串,那就表示到达了文件末尾,如果是一个空行,就会描述为 &#39;\n&#39;,一个只包含换行符的字符串。</p>

<p>(3)函数f.read(),其作用是读取指定数量的文件内容,并以字符串形式返回其内容,参数size 是可选的数值,以指定字符串长度。如果没有指定 size 或者指定为负数,就会读取并返回整个文件。</p>

<p>&nbsp;</p>

<p>2)按字节读取</p>

<p>再实际应用中,所读取的数据不一定都是字符串,为此就需要以字节为单位进行读取。</p>

<p>例如对于BMP 或 EXE 这样的文件,就需要以二进制模式来打开。其工作模式有 &#39;rb&#39;, &#39;wb&#39;, &#39;r+b&#39; 等组合。</p>

<p>对于花样文件,它与BMP位图文件的格式是较为相似的,也是分为前导部分和数据体,但它的数据体又较之位图的更复杂。花样文件的前导部分,其数据格式如图4所示。</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>图4 前导数据格式</p>

<p>&nbsp;</p>

<p>DST格式的花样文件,其数据体的数据结构如图5所示。</p>

<p> &nbsp;</p>

<p>图5数据体的结构</p>

<p>&nbsp;</p>

<p>为测试以二进制方式读取数据,则测试程序如图6所示,它的执行结果如图7所示,说明它与字符串方式读取是有区别的,可以该方式来文件中的数据。</p>

<p> &nbsp;</p>

<p>图6程序内容</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>图7 测试结果</p>

<p>&nbsp;</p>

<p>3)写入文件</p>

<p>在通常的检测系统中,往往需要对采集的数据加以记录和保存,这就涉及文件的写入处理。</p>

<p>测试数据记录的程序见图8所示,图9和图10是其执行结果。</p>

<p> &nbsp;</p>

<p>图8 测试程序</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>图9 执行结果</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>图10 文件内容</p>

<p>&nbsp;</p>

<p>因此利用文件的写入处理,完成可以承担数据记录的功效。</p>

<p>&nbsp;</p>

<p>4)文件定位</p>

<p>在文件的使用中,还常常涉及定位读取的问题,例如在字库中读取指定字符的字模,就需要按字符的编码换算出字模的所在位置来快速读取。</p>

<p>使用函数f.seek()即可起到快速定位的作用,其读取的测试文件如图11所示。</p>

<p> &nbsp;</p>

<p>图11 文件内容</p>

<p>&nbsp;</p>

<p>相应的测试程序如图12所示,经测试其执行结果如图13所示,说明能起到定位读取的作用。</p>

<p> &nbsp;</p>

<p>图12 测试程序</p>

<p>&nbsp;</p>

<p> &nbsp;</p>

<p>图13 执行结果</p>

<p>&nbsp;</p>

<p>5)关闭文件</p>

<p>在完成文件的使用后,需使用函数f.close() 来关闭它并释放其占用的所有系统资源。</p>

<p>&nbsp;</p>

<p>这样在LINUX系统下,在指定了U盘文件的目录后即可实现花样文件的参数提取。</p>

<p>&nbsp;</p>

zhgongzuoshi 发表于 2024-6-11 10:56

<p>敢问博主是在哪家电控公司就职呢,大豪?</p>

jinglixixi 发表于 2024-6-12 09:02

zhgongzuoshi 发表于 2024-6-11 10:56
敢问博主是在哪家电控公司就职呢,大豪?

<p>没有,是高校。</p>
页: [1]
查看完整版本: 【 STM32MP135F-DK测评】文件读写功能及数据提取