【 STM32MP135F-DK测评】文件读写功能及数据提取
[复制链接]
本帖最后由 jinglixixi 于 2024-1-15 20:10 编辑
在绣花机的仿真系统中,涉及到花样文件的读取及参数的提取,若是在裸机系统这项工作是比较费事的,它关系到文件系统的管理,文件的读写的多方面的内容。
但在LINUX系统下,处理这样的问题要简单了许多。
为此,就在STM32MP135F-DK测评板的LINUX系统下对文件的功能加以测试和体验。
1)读取文件
待读取的文件如图1所示,读取文件的程序如图2所示。在程序执行后,其结果如图3所示。
图1 文件内容
图2 程序内容
图3 执行结果
在程序中,所使用的语句其作用如下:
(1)open()函数,其作用是打开文件并返回文件对象,它通常用有两个参数。其第一个参数是一个标识文件名的字符串,第二个参数是由有限的字母组成的字符串,用于描述文件将会被如何使用,即工作模式。
其可选的工作模式有:'r'表示只对文件进行读取;'w',表示只对文件进行写人,该操作会使原有文件被覆盖;'a'表示以追加方式打开文件;'r+'表示以读写方式打开文件。
(2)函数f.readline(),其作用是从文件中读取一行内容,字符串结尾会自动加上一个换行符( \n ),只有当文件最后一行没有以换行符结尾时,这一操作才会被忽略。这样返回值就不会被混淆,如果如果 f.readline() 返回一个空字符串,那就表示到达了文件末尾,如果是一个空行,就会描述为 '\n',一个只包含换行符的字符串。
(3)函数f.read(),其作用是读取指定数量的文件内容,并以字符串形式返回其内容,参数size 是可选的数值,以指定字符串长度。如果没有指定 size 或者指定为负数,就会读取并返回整个文件。
2)按字节读取
再实际应用中,所读取的数据不一定都是字符串,为此就需要以字节为单位进行读取。
例如对于BMP 或 EXE 这样的文件,就需要以二进制模式来打开。其工作模式有 'rb', 'wb', 'r+b' 等组合。
对于花样文件,它与BMP位图文件的格式是较为相似的,也是分为前导部分和数据体,但它的数据体又较之位图的更复杂。花样文件的前导部分,其数据格式如图4所示。
图4 前导数据格式
DST格式的花样文件,其数据体的数据结构如图5所示。
图5数据体的结构
为测试以二进制方式读取数据,则测试程序如图6所示,它的执行结果如图7所示,说明它与字符串方式读取是有区别的,可以该方式来文件中的数据。
图6程序内容
图7 测试结果
3)写入文件
在通常的检测系统中,往往需要对采集的数据加以记录和保存,这就涉及文件的写入处理。
测试数据记录的程序见图8所示,图9和图10是其执行结果。
图8 测试程序
图9 执行结果
图10 文件内容
因此利用文件的写入处理,完成可以承担数据记录的功效。
4)文件定位
在文件的使用中,还常常涉及定位读取的问题,例如在字库中读取指定字符的字模,就需要按字符的编码换算出字模的所在位置来快速读取。
使用函数f.seek()即可起到快速定位的作用,其读取的测试文件如图11所示。
图11 文件内容
相应的测试程序如图12所示,经测试其执行结果如图13所示,说明能起到定位读取的作用。
图12 测试程序
图13 执行结果
5)关闭文件
在完成文件的使用后,需使用函数f.close() 来关闭它并释放其占用的所有系统资源。
这样在LINUX系统下,在指定了U盘文件的目录后即可实现花样文件的参数提取。
|