一种数据文件拼接方法与流程

文档序号:30334981发布日期:2022-06-08 06:35阅读:358来源:国知局
一种数据文件拼接方法与流程

1.本发明涉及文件拼接技术领域,尤其涉及一种数据文件拼接方法。


背景技术:

2.当前嵌入式行业蓬勃发展,单片机被用到越来越多的场景之中。相关芯片在出厂时会刷入预置的程序。对于某些嵌入式芯片,其数据文件分为app和bootloader两部分,其中bootloader为引导区,app为程序的主要部分,格式均为s19格式文件,s19格式文件的组成格式如下:
3.记录类型记录长度存储地址代码/数据校验和
4.(1)当前的文件拼接技术主要还是使用手动拼接的方式,通过依次打开各个文件,手工复制各个文件的内容,并将相关内容添加到一个文件中,并对文件头、文件尾进行手工删除处理。
5.在进行文件拼接时,随着文件数的增多,该方法将花费大量的时间用于文件复制上,同时采用手工方式对数据文件处理,随着数据的增多,找到特定位置数据并进行处理变得越发地困难。与此同时,文件的拼接时的复制粘贴也变的比较困难,极容易产生错误,烧录错误的程序,造成程序烧录进单片机后单片机无法启动的问题。
6.(2)当前文件拼接技术主要集中于对pdf文件的合成上,通过特定的算法将两个pdf文件拼接成一个文件。
7.pdf可以进行拼接,但只是简单地将两个文件合并为一个文件。本身并不能文件进行处理,如删除文件的首行、尾行的内容再进行拼接,只使用于文档类文件的拼接,对于包含数据的文件,其算法并不能有效处理包含大量数据的文件。
8.(3)专利cn112328253a阐述了一种将多个hex文件拼接为同一文件的方法。该方法主要通过将xml文件转换为hex文件,再将两个hex文件拼接为同一文件,并进行格式转换,形成烧录所需的bin
9.1、该方法所使用技术方案复杂,涉及到多次文件转换,然后进行拼接,程序算法编制人工成本高。
10.2、目前随着嵌入式技术的发展,逐渐出现了工程中存在多个hex文件需要进行合并,该方法仅能实现实现两个hev文件的合并,对于多文件的处理缺乏有效方法。
11.3、该方法仅实现部分数据的填充,未实现数据的删除处理,对于存在重复数据的处理缺失。


技术实现要素:

12.本发明要解决的技术问题在于针对现有技术中的缺陷,提供一种数据文件拼接方法。
13.本发明解决其技术问题所采用的技术方案是:
14.本发明提供一种数据文件拼接方法,该方法包括以下步骤:
15.步骤1、读取app数据和bootloader数据,并对其进行加载和处理;
16.步骤2、对app数据和bootloader数据进行处理,根据芯片的内存地址将app数据和bootloader数据分别放到指定的地址上,处理方法包括:采用并发遍历算法遍历所有文档,地址识别,同类数据归并,地址数据去重;
17.步骤3、对处理后的数据进行合并并输出成文件;
18.步骤4、加载生成的文件,调用烧录程序将程序一次性烧录到mcu中。
19.进一步地,本发明的步骤1中进行数据加载的方法为:
20.app数据和bootloader数据的源文件为s19格式文件,s19格式文件为文本文件,编码格式为ascii,采用python的内部函数open进行直接读取调用,读取后获得对应的数据流。
21.进一步地,本发明的步骤1中进行数据处理的方法为:
22.将所有数据流分别加载至已经设定的好的列表中,列表数量通过读取工程文件下s19文件的数量进行确定,列表长度随文件数据的长度的变化而进行变化,通过设定数据文件的数量,读取多个文件数据流。
23.进一步地,本发明的步骤2中遍历所有文档的方法为:
24.加快遍历算法的并发算法为:通过python的os模块监控cpu负载,在负载低于90%时,每查找一个文件,便进行一次2^n运算,生成一个新的文件读取线程;通过该方式,遍历文件的时间复杂度o(log(n)),对比逐文件读取的时间复杂度o(n),速度大幅提高。
25.进一步地,本发明的步骤2中地址识别的方法为:
26.每行数据的第三段为数据的地址端,存储地址为2、3、4个字节,根据记录类型决定;由此,为了解析好存储地址,通过读取记录类型获得文件的存储地址;算法编写如下:在完成文档遍历后,读取每个文档的第一行的第一个字节,识别其中的s1、s2、s3字段,s1为2字节,s2为3字节,s3为4字节,并按照s1、s2、s3进行分为三类。
27.进一步地,本发明的步骤2中同类数据归并的方法为:
28.分类完成后,解析首行的起始地址字段,按照s1、s2、s3的总排序,形成s1《s2《s3的次序,各s段又分别按照存储地址段的数据从小到大排序。
29.进一步地,本发明的步骤2中地址数据去重的方法为:
30.当各文件的数据做好分类排序后,当各文件是独立时,每个文件都是首行首地址+尾行尾地址的形式;而合成一个文件,需要保持整个文件只有一个首地址+尾地址;为实现该操作,记各文件数据为a1,a2,a3...an;an,an+1...am;am,am+1,am+2...a
finally

31.由此可见,对于分类排好序的文件,每个文件的最后一行与紧邻的文件的第一行地址是重复的,由此,采用顺序遍历的算法,依次读取每个文件,将文件的最后一行进行删除,形成新文件。
32.进一步地,本发明的步骤3中的方法为:
33.对所有数据进行处理后,调用库函数write按顺序依次写入到新的文件中,生成新的文件并输出。
34.本发明产生的有益效果是:本发明的数据文件拼接方法,将数据文件合并成单一文件,将大幅减少单片机烧录时工作量,以往工厂在进行单片机烧录时,采用多个文件逐个烧录的方法,费时费力,且出错率较高。
35.(1)通过软件合成后只需一次烧录,采用一次烧录的方式,将使烧录时间缩短50%以上。
36.(2)同时由于单个文件不需要考虑烧录顺序,由于数据文件烧录顺序改变而引起的单片机不能正常启动的错误将完全被避免。
37.(3)解决当前的合并程序仅能处理两个文件的情况,可同时处理多个文件,对于大型代码工程的支持更加完善
附图说明
38.下面将结合附图及实施例对本发明作进一步说明,附图中:
39.图1是本发明实施例的方法流程图;
40.图2是本发明实施例的数据放置方式;
41.图3是本发明实施例的线程生成示意图。
具体实施方式
42.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
43.本发明实施例中的缩略语和关键术语定义
44.s19文件:摩托罗拉公司推出的将程序和数据文件以一种可打印的格式编码形成的文件,该文件包含最终下载单片机到单片机的所有内容。
45.app:单片机数据的主要部分。
46.bootloader:单片机数据的引导部分。
47.如图1所示,本发明实施例的方法采用python语言编写,主要步骤包括:
48.1、读取app数据和bootloader数据;
49.1.1、数据流加载:app和bootloader的源文件为s19格式文件,而s19文件为文本文件,编码格式为ascii,故采用python的内部函数open进行直接读取调用,读取后获得对应的数据流a、b、c
……

50.1.2数据流处理:将所有数据流分别加载至事先已经设定的好的列表中,列表数量通过读取工程文件下s19文件的数量进行确定。因列表长度可随文件数据的长度的变化而进行变化,故不需要担心文件数据过大引起数组越界。通过设定数据文件的数量,可读取多个文件数据流。
51.2、对app及bootloader的数据进行处理;
52.本步骤为文件合成工具的核心步骤,通过第一步获得app和bootloader的数据后,需要对数据进行加工处理。处理的主要内容为根据芯片的内存地址将app数据及bootloader数据分别放到指定的地址上。具体的数据放置方式如图2所示。
53.2.1所有文档遍历;
54.为了避免文件较多时,软件的遍历速度较慢,特针对遍历开发加快遍历算法的并发算法。核心方法为将通过python的os模块监控cpu负载,在负载低于90%时,每查找一个文件,便进行一次2^n运算,生成一个新的文件读取线程,线程生成示意图如图3所示。
55.通过该方式,遍历文件的时间复杂度o(log(n)),对比逐文件读取的时间复杂度o(n),速度大幅提高。
56.2.2地址识别;
57.每行数据的第三段为数据的地址端,存储地址为2、3、4个字节,根据记录类型决定;由此,为了解析好存储地址,需要通过读取记录类型获得文件的存储地址。算法编写如下:在完成文档遍历后,读取每个文档的第一行的第一个字节,识别其中的s1(2字节)、s2(3字节)、s3(4字节)字段,并按照s1、s2、s3进行分为三类。
58.2.3同类数据归并;
59.分类完成后,需要解析首行的起始地址字段,按照s1、s2、s3的总排序,形成s1《s2《s3的次序,各s段又分别按照存储地址段的数据从小到大排序。
60.2.4地址数据去重;
61.当各文件的数据做好分类排序后,就进入了数据处理的最后一步,当各文件是独立时,每个文件都是首行首地址+尾行尾地址的形式。而合成一个文件,需要保持整个文件只有一个首地址+尾地址。为实现该操作,我们记各文件数据为a1,a2,a3...an;an,a
n+1
...am;am,a
m+1
,a
m+2
...a
finally

62.由此可见,对于分类排好序的文件,每个文件的最后一行与紧邻的文件的第一行地址是重复的,由此,采用顺序遍历的算法,依次读取每个文件,将文件的最后一行进行删除,形成新文件。
63.3、对处理后的数据进行合并并输出成文件;
64.对所有数据进行处理后,调用库函数write按顺序依次写入到新的文件中,生成新的文件并输出。
65.4、文件写入;
66.加载生成的文件到,调用烧录程序将程序一次性烧录到mcu中。
67.本发明主要用来解决多个hex文件的合并问题。通过软件算法将s19格式文件进行格式化处理。具体处理内容有:1、将bootloader文件按照指定的地址分为切割为两个部分2、将所有app文件的地址起始行(首行)及地址结束行(尾行)删除,最后将处理后的bootloader文件进行和app文件统一合并,最终形成完整的、可烧录进单片机的数据文件3、实现文件的一键烧录。
68.应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1