一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种固件批量烧录方法及终端与流程

2022-02-19 12:12:10 来源:中国专利 TAG:


1.本发明涉及数据烧录技术领域,特别涉及一种固件批量烧录方法及终端。


背景技术:

2.目前基于pc的固件批量烧录的主要方法是烧录程序会为每一个烧录设备创建一个烧录线程,烧录线程负责读取烧录数据,通过usb或者串口等通道传输给设备,设备写入成功后通知烧录线程,直到烧录线程完成所有数据的烧写。
3.这样的做法存在以下不足:1.由于所有烧录线程都是直接访问文件,这会导致烧录过程中产生大量的文件io请求且会在外部存储中产生颠簸;2.烧录数据未压缩传输。


技术实现要素:

4.本发明所要解决的技术问题是:提供一种固件批量烧录方法及终端,能够提高固件烧录速度。
5.为了解决上述技术问题,本发明采用的技术方案为:
6.一种固件批量烧录方法,包括步骤:
7.获取待烧录数据,将所述待烧录数据锁定在内存中;
8.根据所述待烧录数据的数据内容将所述待烧录数据分成类型为普通块、重复块和擦除块的烧录块;
9.根据分组大小对所述烧录块分组,将同一组内的烧录块链接成烧录链;
10.若烧录所述烧录链中的普通块,则将所述普通块中对应的读写数据发送至烧录程序进行固件烧录;若烧录所述烧录链中的重复块,则将所述重复块中的烧录地址、烧录长度和重复数据发送至烧录程序进行固件烧录,若烧录所述烧录链中的擦除块,则将所述擦除块中的擦除地址、擦除长度发送至烧录程序进行固件烧录。
11.为了解决上述技术问题,本发明采用的另一种技术方案为:
12.一种固件批量烧录终端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
13.获取待烧录数据,将所述待烧录数据锁定在内存中;
14.根据所述待烧录数据的数据内容将所述待烧录数据分成类型为普通块、重复块和擦除块的烧录块;
15.根据分组大小对所述烧录块分组,将同一组内的烧录块链接成烧录链;
16.若烧录所述烧录链中的普通块,则将所述普通块中对应的读写数据发送至烧录程序进行固件烧录;若烧录所述烧录链中的重复块,则将所述重复块中的烧录地址、烧录长度和重复数据发送至烧录程序进行固件烧录,若烧录所述烧录链中的擦除块,则将所述擦除块中的擦除地址、擦除长度发送至烧录程序进行固件烧录。
17.本发明的有益效果在于:获取待烧录数据,并将待烧录数据锁定在内存中,能够在数据烧录前,将烧录数据预先写入锁定的内存中,防止烧录过程产生大量文件io操作;根据
待烧录数据的数据内容将待烧录数据分成类型为普通块、重复块和擦除块的烧录块,将同一组内的烧录块链接成烧录链,对烧录链进行烧录,若烧录普通块,则将普通块中对应的读写数据发送至烧录程序进行固件烧录;若烧录重复块,则将重复块中的烧录地址、烧录长度和重复数据发送至烧录程序进行固件烧录,若烧录擦除块,则将擦除块中的擦除地址、擦除长度发送至烧录程序进行固件烧录;因此烧录擦除块时,能够以擦除代替写入来提升烧录速度,并且重复块和擦除块不需要传输具体的数据,大大减少了发送到烧录程序的数据传输量,进一步提高了固件烧录速度。
附图说明
18.图1为本发明实施例的一种固件批量烧录方法的流程图;
19.图2为本发明实施例的一种固件批量烧录终端的示意图;
20.图3为本发明实施例的一种固件批量烧录方法的烧录数据结构示意图;
21.图4为本发明实施例的一种固件批量烧录方法的批量烧录流程图;
22.图5为本发明实施例的一种固件批量烧录方法的烧录线程的工作流程图。
具体实施方式
23.为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
24.请参照图1,本发明实施例提供了一种固件批量烧录方法,包括步骤:
25.获取待烧录数据,将所述待烧录数据锁定在内存中;
26.根据所述待烧录数据的数据内容将所述待烧录数据分成类型为普通块、重复块和擦除块的烧录块;
27.根据分组大小对所述烧录块分组,将同一组内的烧录块链接成烧录链;
28.若烧录所述烧录链中的普通块,则将所述普通块中对应的读写数据发送至烧录程序进行固件烧录;若烧录所述烧录链中的重复块,则将所述重复块中的烧录地址、烧录长度和重复数据发送至烧录程序进行固件烧录,若烧录所述烧录链中的擦除块,则将所述擦除块中的擦除地址、擦除长度发送至烧录程序进行固件烧录。
29.从上述描述可知,本发明的有益效果在于:获取待烧录数据,并将待烧录数据锁定在内存中,能够在数据烧录前,将烧录数据预先写入锁定的内存中,防止烧录过程产生大量文件io操作;根据待烧录数据的数据内容将待烧录数据分成类型为普通块、重复块和擦除块的烧录块,将同一组内的烧录块链接成烧录链,对烧录链进行烧录,若烧录普通块,则将普通块中对应的读写数据发送至烧录程序进行固件烧录;若烧录重复块,则将重复块中的烧录地址、烧录长度和重复数据发送至烧录程序进行固件烧录,若烧录擦除块,则将擦除块中的擦除地址、擦除长度发送至烧录程序进行固件烧录;因此烧录擦除块时,能够以擦除代替写入来提升烧录速度,并且重复块和擦除块不需要传输具体的数据,大大减少了发送到烧录程序的数据传输量,进一步提高了固件烧录速度。
30.进一步地,根据所述待烧录数据的数据内容将所述待烧录数据分成类型为普通块、重复块和擦除块的烧录块包括:
31.按照分组大小分析待烧录数据,依次定位所述待烧录数据中的每一个扇区,判断
所述扇区中的字节是否均相同,若均相同,则判断所述扇区中的数据是否均为1,若均为1,则所述扇区为擦除扇区,否则,所述扇区为重复扇区,若不相同,则所述扇区为普通扇区;
32.将预设下限个数的扇区组成烧录块,判断所述烧录块中是否全为重复扇区,若是,则所述烧录块为重复块,否则,判断所述烧录块中是否全为擦除扇区,若是,则所述烧录块为擦除块,否则,所述烧录块为普通块。
33.由上述描述可知,根据分组大小分析待烧录数据,一次定位待烧录数据中的扇区,并且根据扇区中的字节判断扇区类型,能够基于扇区对擦除块进行分类,便于后续根据扇区类型向烧录程序提供对应的数据信息,从而提高固件烧录速度。
34.进一步地,根据所述待烧录数据的数据内容将所述待烧录数据分成类型为普通块、重复块和擦除块的烧录块之后包括:
35.将预设下限个数的扇区组成烧录块,并确认所述烧录块的类型之后,判断下一个扇区的类型与所述烧录块的类型是否相同,若相同,则将下一个所述扇区加入所述烧录块,直至所述烧录块的扇区达到预设上限个数;
36.若不相同,则判断所述烧录块是否是擦除块,若是擦除块,则判断所述烧录块大小是否达到擦除块预设大小减去擦除块尾部预设冗余大小的值,若是,则结束所述烧录块的创建,否则,将下一个所述烧录块加入所述烧录块,并将所述烧录块类型修改为重复块,若是擦除块,则结束所述烧录块的创建。
37.由上述描述可知,将预设下限个数的扇区组成烧录块,并确认烧录块类型之后,若下一个扇区的类型与烧录块的类型相同,则将下一个扇区加入烧录块,若类型不同且烧录块为擦除块,则通过烧录块的大小判断下一个扇区的内容是否加入烧录块并且是否对应修改擦除块的类型为重复块,从而能够准确地对扇区进行划分,避免资源浪费。
38.进一步地,将同一组内的烧录块链接成烧录链之后包括:
39.为所述烧录链创建烧录线程;
40.若所述烧录链对应的烧录线程全部烧录结束且存在继续烧录线程,则判断是否存在未烧录的烧录链,若是,则对所述未烧录的烧录链进行烧录,直至所有烧录链均烧录结束。
41.由上述描述可知,为烧录链创建对应的烧录线程,若烧录链对应的烧录线程全部烧录结束,且存在继续烧录的线程,则表示还存在烧录链未烧录完成,因此需要对未烧录的烧录链进行烧录,从而保证数据烧录的完整性。
42.进一步地,若烧录所述烧录链中的重复块,则将所述重复块中的烧录地址、烧录长度和重复数据发送至烧录程序进行固件烧录包括:
43.若烧录所述烧录链中的重复块,则获取所述重复块中的重复数据,并根据所述重复数据在所述重复块中重复出现的次数得到烧录长度,将所述重复块中的烧录地址、所述重复数据和所述烧录长度生成重复写命令并发送所述重复写命令至烧录程序进行固件烧录;
44.若烧录所述烧录链中的擦除块,则将所述擦除块中的擦除地址、擦除长度发送至烧录程序进行固件烧录包括:
45.若烧录所述烧录链中的擦除块,则根据擦除地址和擦除长度发送擦除命令至烧录程序进行固件烧录。
46.由上述描述可知,当烧录重复块时,能够根据重复数据得到烧录长度,并根据烧录地址、烧录长度和重复数据生成对应的重复写命令;当烧录擦除块时,能够根据擦除地址和擦除长度生成对应的擦除命令,因此对于重复块和擦除块,均不需要向烧录程序提供需要烧录的具体数据,能够减少数据传输量,从而提高固件烧录速度。
47.请参照图2,本发明另一实施例提供了一种固件批量烧录终端,包括存储器、处理器以及存储在所述存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
48.获取待烧录数据,将所述待烧录数据锁定在内存中;
49.根据所述待烧录数据的数据内容将所述待烧录数据分成类型为普通块、重复块和擦除块的烧录块;
50.根据分组大小对所述烧录块分组,将同一组内的烧录块链接成烧录链;
51.若烧录所述烧录链中的普通块,则将所述普通块中对应的读写数据发送至烧录程序进行固件烧录;若烧录所述烧录链中的重复块,则将所述重复块中的烧录地址、烧录长度和重复数据发送至烧录程序进行固件烧录,若烧录所述烧录链中的擦除块,则将所述擦除块中的擦除地址、擦除长度发送至烧录程序进行固件烧录。
52.由上述描述可知,获取待烧录数据,并将待烧录数据锁定在内存中,能够在数据烧录前,将烧录数据预先写入锁定的内存中,防止烧录过程产生大量文件io操作;根据待烧录数据的数据内容将待烧录数据分成类型为普通块、重复块和擦除块的烧录块,将同一组内的烧录块链接成烧录链,对烧录链进行烧录,若烧录普通块,则将普通块中对应的读写数据发送至烧录程序进行固件烧录;若烧录重复块,则将重复块中的烧录地址、烧录长度和重复数据发送至烧录程序进行固件烧录,若烧录擦除块,则将擦除块中的擦除地址、擦除长度发送至烧录程序进行固件烧录;因此烧录擦除块时,能够以擦除代替写入来提升烧录速度,并且重复块和擦除块不需要传输具体的数据,大大减少了发送到烧录程序的数据传输量,进一步提高了固件烧录速度。
53.进一步地,根据所述待烧录数据的数据内容将所述待烧录数据分成类型为普通块、重复块和擦除块的烧录块包括:
54.按照分组大小分析待烧录数据,依次定位所述待烧录数据中的每一个扇区,判断所述扇区中的字节是否均相同,若均相同,则判断所述扇区中的数据是否均为1,若均为1,则所述扇区为擦除扇区,否则,所述扇区为重复扇区,若不相同,则所述扇区为普通扇区;
55.将预设下限个数的扇区组成烧录块,判断所述烧录块中是否全为重复扇区,若是,则所述烧录块为重复块,否则,判断所述烧录块中是否全为擦除扇区,若是,则所述烧录块为擦除块,否则,所述烧录块为普通块。
56.由上述描述可知,根据分组大小分析待烧录数据,一次定位待烧录数据中的扇区,并且根据扇区中的字节判断扇区类型,能够基于扇区对擦除块进行分类,便于后续根据扇区类型向烧录程序提供对应的数据信息,从而提高固件烧录速度。
57.进一步地,根据所述待烧录数据的数据内容将所述待烧录数据分成类型为普通块、重复块和擦除块的烧录块之后包括:
58.将预设下限个数的扇区组成烧录块,并确认所述烧录块的类型之后,判断下一个扇区的类型与所述烧录块的类型是否相同,若相同,则将下一个所述扇区加入所述烧录块,
直至所述烧录块的扇区达到预设上限个数;
59.若不相同,则判断所述烧录块是否是擦除块,若是擦除块,则判断所述烧录块大小是否达到擦除块预设大小减去擦除块尾部预设冗余大小的值,若是,则结束所述烧录块的创建,否则,将下一个所述烧录块加入所述烧录块,并将所述烧录块类型修改为重复块,若是擦除块,则结束所述烧录块的创建。
60.由上述描述可知,将预设下限个数的扇区组成烧录块,并确认烧录块类型之后,若下一个扇区的类型与烧录块的类型相同,则将下一个扇区加入烧录块,若类型不同且烧录块为擦除块,则通过烧录块的大小判断下一个扇区的内容是否加入烧录块并且是否对应修改擦除块的类型为重复块,从而能够准确地对扇区进行划分,避免资源浪费。
61.进一步地,将同一组内的烧录块链接成烧录链之后包括:
62.为所述烧录链创建烧录线程;
63.若所述烧录链对应的烧录线程全部烧录结束且存在继续烧录线程,则判断是否存在未烧录的烧录链,若是,则对所述未烧录的烧录链进行烧录,直至所有烧录链均烧录结束。
64.由上述描述可知,为烧录链创建对应的烧录线程,若烧录链对应的烧录线程全部烧录结束,且存在继续烧录的线程,则表示还存在烧录链未烧录完成,因此需要对未烧录的烧录链进行烧录,从而保证数据烧录的完整性。
65.进一步地,若烧录所述烧录链中的重复块,则将所述重复块中的烧录地址、烧录长度和重复数据发送至烧录程序进行固件烧录包括:
66.若烧录所述烧录链中的重复块,则获取所述重复块中的重复数据,并根据所述重复数据在所述重复块中重复出现的次数得到烧录长度,将所述重复块中的烧录地址、所述重复数据和所述烧录长度生成重复写命令并发送所述重复写命令至烧录程序进行固件烧录;
67.若烧录所述烧录链中的擦除块,则将所述擦除块中的擦除地址、擦除长度发送至烧录程序进行固件烧录包括:
68.若烧录所述烧录链中的擦除块,则根据擦除地址和擦除长度发送擦除命令至烧录程序进行固件烧录。
69.由上述描述可知,当烧录重复块时,能够根据重复数据得到烧录长度,并根据烧录地址、烧录长度和重复数据生成对应的重复写命令;当烧录擦除块时,能够根据擦除地址和擦除长度生成对应的擦除命令,因此对于重复块和擦除块,均不需要向烧录程序提供需要烧录的具体数据,能够减少数据传输量,从而提高固件烧录速度。
70.本发明的一种固件批量烧录方法及终端,适用于基于pc的固件批量烧录,能够有效提升数据批量烧录速度,以下通过具体实施例进行说明:
71.实施例一
72.请参照图1、图3至图5,一种固件批量烧录方法,包括步骤:
73.s1、获取待烧录数据,将所述待烧录数据锁定在内存中。
74.具体的,在固件批量烧录之前需要先设置输入以下数据:
75.烧录块大小的下限,单位为扇区,1个扇区为512字节,由于flash存储都是按page进行编程写入数据,因此优选地将烧录块下限设置为4扇区,即一个page大小;
76.擦除块大小,单位为扇区,建议设置为512,256k大小;
77.分组大小,单位为兆,建议设置为32;
78.擦除块尾部冗余大小,单位为扇区,建议设置为128,即占四分之一的擦除块大小;
79.烧录块大小的上限,单位为扇区,建议设置为512,即与擦除块大小相同。
80.为了防止烧录过程产生大量文件io操作,通过事先锁定内存空间,在每组数据烧录前,将本组的数据预先写入锁定的内存中,同时控制同步烧录来完成内存中的数据更新,这样所有烧录线程都将从内存中读取数据;而现有技术通常是不同线程各自维护一块内存,多线程烧录过程中会从外部文件读入数据到内存,这会导致外部文件的io操作增加,因为各线程读取的数据位置不一样,导致io颠簸,而本实施例中是多个线程进行同步,保证此步需要的数据提前读入内存,只进行一次外部文件io操作,从而减少从外部存储读取数据的时间开销,进一步提升烧录速度。
81.s2、根据所述待烧录数据的数据内容将所述待烧录数据分成类型为普通块、重复块和擦除块的烧录块。
82.s21、按照分组大小分析待烧录数据,依次定位所述待烧录数据中的每一个扇区,判断所述扇区中的字节是否均相同,若均相同,则判断所述扇区中的数据是否均为1,若均为1,则所述扇区为擦除扇区,否则,所述扇区为重复扇区,若不相同,则所述扇区为普通扇区。
83.具体的,按分组大小申请内存从文件中读取数据到内存,如果剩下数据量大于申请大小,则读取申请大小的数据量,如果不足申请大小则把剩余数据量全部读入;对读入的数据进行分析,创建一个烧录块链表,在链表元数据中保存当前数据的源文件句柄。
84.依次定位待烧录数据中的扇区并进行分析,判断是普通扇区,重复扇区还是擦除扇区:如果扇区内数据都相同则为重复扇区;重复扇区的重复数据为0xff时为擦除扇区;其他情况则为普通扇区;
85.具体的,一个扇区512个字节,由于存储介质的擦除操作只能将存储单元置1,一个存储单元为一个bit,8个bit为1就是0xff,因此重复数据为0xff时为擦除扇区,如果扇区中512字节都为除0xff外的相同值,比如512个字节的0xcc则为重复扇区。
86.s22、将预设下限个数的扇区组成烧录块,判断所述烧录块中是否全为重复扇区,若是,则所述烧录块为重复块,否则,判断所述烧录块中是否全为擦除扇区,若是,则所述烧录块为擦除块,否则,所述烧录块为普通块。
87.具体的,请参照图3,分析数据达到烧录块大小下限时,创建烧录块数据结构,保存烧录块开始数据的文件偏移,烧录地址和烧录块的数据大小;
88.分析烧录块类型,如果烧录块内包含普通扇区则为普通烧录块,如果全是重复扇区则为重复烧录块并把重复数据记录到烧录块结构中,如果全是擦除扇区则为擦除烧录块。
89.s23、判断下一个扇区的类型与所述烧录块的类型是否相同,若相同,则将下一个所述扇区加入所述烧录块,直至所述烧录块的扇区达到预设上限个数;
90.若不相同,则判断所述烧录块是否是擦除块,若是擦除块,则判断所述烧录块大小是否达到擦除块预设大小减去擦除块尾部预设冗余大小的值,若是,则结束所述烧录块的创建,否则,将下一个所述烧录块加入所述烧录块,并将所述烧录块类型修改为重复块,若
是擦除块,则结束所述烧录块的创建。
91.具体的,继续分析下一个扇区,如果与当前烧录块类型相同,增加烧录块大小。当烧录块大小达到上限时,结束一个烧录块创建。如果与当前烧录块类型不同时,判断烧录块类型不是擦除块时,则结束一个烧录块创建。如果烧录块类型是擦除块,则需要判断烧录块的大小是不是达到擦除块大小扣除擦除块尾部冗余大小,如果超出则设置烧录块大小为擦除块大小,结束一个烧录块创建。如果未超出则修改烧录块类型为重复烧录块,结束一个烧录块创建。
92.s3、根据分组大小对所述烧录块分组,将同一组内的烧录块链接成烧录链。
93.具体的,通过预先设定的分组大小进行分组,同组内的烧录块链接成一个链表,当内存中的数据都分解完成,则结束一个烧录块链表的创建。
94.其中,将同一组内的烧录块链接成烧录链之后包括:
95.为所述烧录链创建烧录线程;
96.若所述烧录链对应的烧录线程全部烧录结束且存在继续烧录线程,则判断是否存在未烧录的烧录链,若是,则对所述未烧录的烧录链进行烧录,直至所有烧录链均烧录结束。
97.具体的,请参照图4,读取烧录链数据后,创建对应的烧录线程,对烧录线程进行烧录,并判断是否所有的烧录线程全部烧录结束,若未全部烧录结束,则继续对未烧录的线程进行烧录;
98.若全部烧录结束时,若线程全部失败则烧录失败,若存在继续烧录线程则判断是否存在未烧录的烧录链,若存在未烧录的烧录链,则读取该烧录链数据进行烧录,否则,烧录成功;
99.s4、若烧录所述烧录链中的普通块,则将所述普通块中对应的读写数据发送至烧录程序进行固件烧录;若烧录所述烧录链中的重复块,则将所述重复块中的烧录地址、烧录长度和重复数据发送至烧录程序进行固件烧录,若烧录所述烧录链中的擦除块,则将所述擦除块中的擦除地址、擦除长度发送至烧录程序进行固件烧录。
100.其中,若烧录所述烧录链中的重复块,则获取所述重复块中的重复数据,并根据所述重复数据在所述重复块中重复出现的次数得到烧录长度,将所述重复块中的烧录地址、所述重复数据和所述烧录长度生成重复写命令并发送所述重复写命令至烧录程序进行固件烧录;
101.若烧录所述烧录链中的擦除块,则根据擦除地址和擦除长度发送擦除命令至烧录程序进行固件烧录。
102.具体的,请参照图5,根据烧录块类型对烧录块进行处理,若为普通烧录块,则读取烧录数据并进行普通写,若为擦除块,则发送擦除命令,若为重复块,则取出重复数据并发送重复写命令。
103.当烧录数据写入失败时,则烧录失败;
104.当烧录数据写入成功时,则判断是否还有未处理的烧录块,若是,则处理未烧录的烧录块,否则,结束烧录退出线程。
105.实施例二
106.请参照图2,一种固件批量烧录终端,包括存储器、处理器以及存储在所述存储器
上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现实施例一的一种固件批量烧录方法的各个步骤。
107.综上所述,本发明提供的一种固件批量烧录方法及终端,获取待烧录数据,并将待烧录数据锁定在内存中,能够在数据烧录前,将烧录数据预先写入锁定的内存中,防止烧录过程产生大量文件io操作;根据待烧录数据的数据内容将待烧录数据分成类型为普通块、重复块和擦除块的烧录块,将同一组内的烧录块链接成烧录链,对烧录链进行烧录,若烧录普通块,则将普通块中对应的读写数据发送至烧录程序进行固件烧录;若烧录重复块,则将重复块中的烧录地址、烧录长度和重复数据发送至烧录程序进行固件烧录,若烧录擦除块,则将擦除块中的擦除地址、擦除长度发送至烧录程序进行固件烧录;因此重复块和擦除块都大大减少了pc到设备的数据传输量,同时利用了flash存储设备擦除速度比写入速度快多个数量级的特性,将部分烧录数据以擦除代替写入来提升烧录速度。通过事先锁定内存空间,同时控制同步烧录来完成内存中的数据更新,这样所有烧录线程都将从内存中读取数据,减少从外部存储读取数据的时间开销,进一步提升烧录速度。
108.以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献