CN113885917A - 控制器的程序刷写方法、装置、控制器和存储介质 - Google Patents

控制器的程序刷写方法、装置、控制器和存储介质 Download PDF

Info

Publication number
CN113885917A
CN113885917A CN202111208423.9A CN202111208423A CN113885917A CN 113885917 A CN113885917 A CN 113885917A CN 202111208423 A CN202111208423 A CN 202111208423A CN 113885917 A CN113885917 A CN 113885917A
Authority
CN
China
Prior art keywords
program
memory
flashed
code
space
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111208423.9A
Other languages
English (en)
Inventor
周添
王宇
张建
李春善
公博健
侯殿龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
FAW Group Corp
Original Assignee
FAW Group Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by FAW Group Corp filed Critical FAW Group Corp
Priority to CN202111208423.9A priority Critical patent/CN113885917A/zh
Publication of CN113885917A publication Critical patent/CN113885917A/zh
Priority to PCT/CN2022/125868 priority patent/WO2023066233A1/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例公开了控制器的程序刷写方法、装置、控制器和存储介质。其中,该方法包括:根据预设存储结构获取待刷写程序;确定所述待刷写程序的代码内容的运行空间占用信息;基于刷写起始地址和所述运行空间占用信息将所述待刷写程序写入内存空间。本发明实施例通过预估待刷写程序的运行内存大小以及起始地址的方式将待刷写程序写入内存空间,有效节省了内存空间,可提高程序刷写的成功率,从而提高控制器运行的稳定性。

Description

控制器的程序刷写方法、装置、控制器和存储介质
技术领域
本发明实施例涉及自动化控制技术领域,尤其涉及控制器的程序刷写方法、装置、控制器和存储介质。
背景技术
目前,嵌入式控制器逐渐丰富人们的日常生活,嵌入式控制器在执行功能前需要写入对应的程序。在将程序写入控制器时,需要由嵌入式开发工程师人为写入程序的起始地址、代码段、数据段、标定段以及内存占用等程序运行参数。这种控制器的开发模式导致开发过程繁琐,即使针对相同硬件设备刷写不同的控制程序,也需要确定的控制程序对应的运行参数,导致嵌入式开发工程师需要反复确定控制程序的运行参数,大大影响了控制器的开发效率,目前亟需一种快速安全的控制器刷写方法。
发明内容
本发明实施例提供了一种控制器的程序刷写方法、装置、控制器和存储介质,以实现程序的准确刷写,可减少运行参数的测试工作量,提高控制器运行的稳定性。
第一方面,本发明实施例提供了一种控制器的程序刷写方法,所述方法包括:
根据预设存储结构获取待刷写程序;
确定所述待刷写程序的代码内容的运行空间占用信息;
基于刷写起始地址和所述运行空间占用信息将所述待刷写程序写入内存空间。
第二方面,本发明实施例提供了一种控制器的程序刷写装置,所述装置包括:
程序接收模块,用于根据预设存储结构获取待刷写程序;
空间信息模块,用于确定所述待刷写程序的代码内容的运行空间占用信息;
程序刷写模块,用于基于刷写起始地址和所述运行空间占用信息将所述待刷写程序写入内存空间。
第三方面,本发明实施例提供了一种控制器,所述控制器包括:
一个或多个中央处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个中央处理器执行,使得所述一个或多个中央处理器实现如本发明实施例所述的控制器的程序刷写方法。
第三方面,本发明实施例提供了一种计算机可读存储介质,其上存储有程序,其特征在于,所述程序被中央处理器执行时实现如本发明实施例所述的控制器的程序刷写方法。
本发明实施例的技术方案,通过根据预设存储结构获取待刷写程序,确定所述待刷写程序的代码内容的运行空间占用信息,并基于刷写起始地址和所述运行空间占用信息将所述待刷写程序写入内存空间。上述技术方案,采用基于预估待刷写程序的运行内存大小以及起始地址的方式将待刷写程序写入内存空间,有效节省了内存空间,可提高程序刷写的成功率,从而提高控制器运行的稳定性,可以减少确定待刷写程序运行参数的测试时间,可提高控制器的开发效率。
附图说明
图1是本发明实施例一提供的一种控制器的程序刷写方法的流程图;
图2是本发明实施例二提供的一种控制器的程序刷写方法的流程图;
图3是本发明实施例二提供的一种代码内容的内存占用量确定的流程图;
图4是本发明实施例提供的一种控制器的程序刷写方法的实现效果图;
图5是本发明实施例提供的另一种控制器的程序刷写方法的示例图;
图6是本发明实施例三提供的一种控制器的程序刷写装置的结构框图;
图7是本发明实施例四提供的一种控制器的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
实施例一
图1是本发明实施例一提供的一种控制器的程序刷写方法的流程图,本实施例可适用于控制器刷写代码的情况,该方法可以由本发明实施例所提供的控制器的程序刷写装置执行,该装置可以由软件和/或硬件的方式来实现,该装置可配置于控制器中。
如图1所示,本发明实施例提供的一种控制器的程序刷写方法具体包括如下步骤:
S110、根据预设存储结构获取待刷写程序。
其中,预设存储结构可以是用于存储待刷写程序的数据结构,该数据结构存储的可以是刷写程序的代码段、数据段、标定段和中断内存大小的数据段。本发明实施例对存储的数据的种类不作限制。
其中,待刷写的程序可以是实现控制器功能的程序,例如,实现控制器更新功能,删除功能等的代码,本发明实施例对待刷写程序实现的具体功能不作限制。
在本发明实施例中,预设存储结构可以包括代码段、数据段、标定段和中断内存大小的数据段,在接收到待刷写程序后,可以将待刷写程序的代码存储到代码段,可以将全局变量存储到数据段,可以将标定量存储到标定段,可以将中断数据存储到中断内存大小的数据段。
S120、确定待刷写程序的代码内容的运行空间占用信息。
其中,代码内容可以是构成待刷写程序处理逻辑的程序文本,可以包括全局变量、标定量和中断等内容。运行空间占用信息可以是反映上述代码内容在程序运行时所需要的内存空间大小的信息,可以包括待刷写程序本身存储的内存的信息以及程序运行时占用的内存信息。
在本发明实施例中,可以通过存储在预存储结构中的代码段确定待刷写程序本身存储的内存的信息以及通过存储在预存储结构中的数据段、标定段和中断内存大小的数据段确定全局变量、标定量和中断等内容在程序运行时占用的信息。
示例性的,如果待刷写程序的代码内容中的全局变量有1个,该全局变量在运行时所占据的内存可以是10字节。如果待刷写程序的代码内容中的标定量有8个,每个标定量在运行时所占据的内存大小最大可以为2字节,那么待刷写程序的标定量在运行时所占据的内存大小可以是8*2字节,即16字节。如果待刷写程序的代码内容中的中断的深度为2,一个中断在运行时所占据的内存大小可以为10千字节(Kbytes,KB),那么待刷写程序的代码内容中的中断在运行时所占据的内存大小可以为2*10KB,即20KB。
S130、基于刷写起始地址和运行空间占用信息将待刷写程序写入内存空间。
其中,地址可以指一种编号,可以标识空间中的部分区域。刷写起始地址可以是内存空间中存储待刷写程序的起始地址,该刷写起始地址可以指向内存空间中还未被占用的区域。运行空间占用信息可以表示待刷写程序运行使用的内存空间的信息,可以包括待刷写程序本身存储的空间大小的信息以及在程序运行时占用的空间大小的信息。内存空间可以是控制器中的存储区域,该内存空间可以用来保存进程运行时的程序和数据。内存空间,可以是在未被占用的内存空间中的区域,也可以是在已经被占用的内存空间中的区域。待刷写程序可以写入内存空间的任意位置,并且内存空间的空间大小满足待刷写程序的完整准确存储。示例性的,待刷写程序写入的区域可以是内存空间的最前面的一块区域,待刷写程序在内存空间的起始地址可以为0,待刷写程序在内存空间的结束地址可以为0和待刷写程序的运行空间占用信息对应的内存空间大小的取值之和。又例如,待刷写程序写入的区域可以是内存空间的最后一块区域,并且该最后一块区域可以完整和准确存放该待刷写程序,待刷写程序在内存空间的起始地址可以是内存空间的终止地址减去待刷写程序的运行空间占用信息对应的内存空间大小。
在本发明实施例中,在确定待刷写程序的运行空间占用信息之后,可以将待刷写程序的刷写起始地址为开始向内存空间内写入待刷写程序,根据刷写起始地址可以准确控制待刷写程序在内存空间中的存储位置,可提高程序刷写控制的准确性,减少内存空间的空间浪费,降低内存空间的碎片化程度。
本发明实施例的技术方案,通过根据预设存储结构来获取待刷写程序,确定得到待刷写程序的代码内容的运行空间占用信息,然后,基于刷写起始地址和运行空间占用信息将待刷写程序写入该刷写地址指向的内存空间中。上述技术方案,采用基于预估待刷写程序的运行内存大小以及起始地址的方式将所述待刷写程序写入内存空间,有效节省了内存空间,可提高程序刷写的成功率,从而提高控制器运行的稳定性,可以减少确定待刷写程序运行参数的测试时间,提高控制器的开发效率。
进一步的,在上述实施例基础上,在基于刷写起始地址和运行空间占用信息将待刷写程序写入内存空间之后,还包括:根据待刷写程序的运行空间占用信息更新刷写起始地址。
本发明实施例中,按照刷写起始地址将待刷写程序写入内存空间后,可以将刷写起始地址以及待刷写程序的运行空间占用信息对应的内存空间大小的取值之和记为刷写结束地址,可以使用刷写结束地址更新原有的刷写起始地址。例如,对于大端存储的内存,可以将刷写结束地址减1作为新的刷写起始地址,对于小端存储的内存可以将刷写结束地址加1作为新的刷写起始地址。
实施例二
图2是本发明实施例二提供的一种控制器的程序刷写方法的流程图,本发明实施例以上述实施例为基础进行优化。如图2所示,本发明实施例二提供的一种控制器的程序刷写方法,具体包括如下步骤:
S210、调用数据结构类接收并存储待刷写程序的代码段、数据段、标定段以及中断数据。
其中,数据结构类可以是用于根据不同数据结构接收数据并存储的程序处理逻辑,例如可以利用编程语言编写的如get()和set()方法,可以用于访问待刷写程序的属性和/或方法。当然,具体数据结构类的方法名,可以自己定义。
在本发明实施例中,代码段可以是刷写程序数据结构对应的不同逻辑代码。数据段可以是刷写的程序运行所需的数据区域,数据段由刷写程序相应的不同代码中的全局变量组成的。标定段可以是刷写程序相应的不同代码中的标定量组成的标定段。中断可以指计算机运行过程中,出现某些意外情况需要主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。示例性的,每个代码具有不同的执行顺序,在执行当前代码时,又执行另一个代码,那么此时的情况对于当前的代码来说就是中断,但是,需要把当前的代码保存起来,以供另一个代码执行完可以返回以继续执行当前代码。那么中断的代码所需要的空间大小可以是中断数据。
具体的,可以不同数据结构的预先刷写有对应的数据结构类,在进行待刷写程序的写入时,可以依次调用不同的数据结构类对待刷写代码进行处理,分别获取并存储待刷写代码的代码段、数据段、标定段以及中断数据等结构。可以理解的是,数据结构类可以预先刷写在控制器中,在待刷写程序写入时被调用执行。
S220、读取待刷写程序的代码内容,其中,代码内容包括:代码文本、全局变量、标定量和中断。
其中,代码文本可以指程序中的源代码,具有执行功能的处理逻辑,代码文本可以是用编程语言编写的人类可读文本。全局变量是在函数外部定义的外部变量,全局变量既可以是对象函数创建,也可以是在本程序任何地方创建。全局变量可以被该待刷写程序所有对象或函数引用。标量可以理解为常量,常量可以指在计算机程序运行时,不会被程序修改的量。中断可以指待刷写程序在运行中,待刷写程序的代码具有不同的执行顺序,在执行当前代码时,又执行另一个代码,那么此时的情况对于当前的代码来说就是中断。
在本发明实施例中,可以提取待刷写程序的代码内容,并分别提取代码内容中的代码文本、全局变量、标定量和中断等内容。可以理解的是,代码内容可以预先读取到控制器的寄存器中,通过对寄存器的操作实现代码内容的读取。
S230、分别确定代码文本、全局变量、标定量和中断的内存占用量,并将各内存占用量作为运行空间占用信息。
其中,内存占用量可以是支持代刷写程序存储和运行所需要的内存开销,可以分别针对代码文本、全局变量、标定量和中断估算出各自对应的内存占用量,可以将确定出各内存占用量作为待刷写程序的运行空间占用信息。
示例性的,可以通过编程语言编写的代码读取待刷写程序中所有代码有意义的行数,然后计算出转换成二进制文件后所需要的内存空间大小,并作为代码文本内存占用量。例如,待刷写程序中所有代码有意义的行数可以为100行,每行的内存空间大小最大可以为1KB,那么待刷写程序中所有代码转换成二进制文件后所需要的内存空间大小可以为100KB。也可以通过编程语言编写的代码读取待刷写程序中所有全局变量。例如,如果读取待刷写程序中的所有全局变量有2个,所有全局变量中最大的所需的内存空间大小如果为1KB,那么待刷写程序中所有全局变量所需的内存空间可以为2KB。也可以通过编程语言编写的代码读取待刷写程序中所有标定量。例如,如果读取待刷写程序中所有标定量有2个,所有标定量中最大的所需的内存空间大小如果为1KB,那么待刷写程序中所有标定量所需的内存空间可以为2KB。也可以通过编程语言编写的代码读取待刷写程序中设置的中断向量表的优先级、该代码中的函数涉及的参数以及临时变量被触发中断时所需的内存大小。中断向量表中存放了待刷写程序中的所有中断,如果中断向量表中优先级最高的为8,则可以认为中断向量表中中断层数最深为8,并将中断层数最深的所需要的中断内存大小作为待刷写程序所需要的中断内存大小的基准值,由于中断,所涉及的参数以及临时变量所需的内存大小可以为2KB,则待刷写程序中中断所需要的内存占用量为16KB。另外,可以将代码文本、全局变量、标定量和中断所需的内存空间大小表述为代码文本、全局变量、标定量和中断所需的内存占用量,并可以将代码文本、全局变量、标定量和中断所需的内存占用量之和作为运行空间占用信息。
S240、确定内存空间的剩余空间是否满足运行空间占用信息。
其中,内存空间的剩余空间可以是内存空间中还没有被占用的空间。
具体的,可以将剩余空间与运行空间占用信息对应的内存空间进行比较,判断剩余空间与运行空间占用信息对应的内存空间之间的大小关系,可以根据不同的大小关系控制待刷写程序的写入过程,以实现待刷写代码的准确写入。
S250、若满足,则在内存空间的预设区域读取待刷写程序的刷写起始地址,并按照刷写起始地址将待刷写程序写入内存空间。
其中,预设区域可以是内存空间中预先约定的用于存储刷写起始地址的内存区域,预设区域可以位于内存空间的开头或者结尾,也可以是内存空间中某个固定地址对应的内存区域,预设区域中的刷写起始地址可以用于标识内存空间中剩余空间的所在位置。
在本发明实施例中,当剩余空间大于待刷写程序的运行空间占用信息对应的内存空间大小时,可以确定剩余空间满足运行空间占用信息,可以在预设区域中读取到刷写起始地址,可以将该刷写起始地址为起点依次将待刷写代码的数据刷写到内存空间。
需要说明的是,在进行待刷写代码的写入时,可以根据待刷写代码中的不同内容分别刷写内存空间的不同区域,例如,可以根据当前芯片的程序闪存(Program flash,Pflash)中的起始地址、大小以及启动加载(bootloader)的终止地址,设置待刷写程序的起始地址,以及根据当前芯片的数据闪存(Data flash,dflash)的起始地址和大小,对全局变量、标定量和中断写入的位置以及所需的空间进行设置,并确保地址连续,以减少空间的碎片化。并将待刷写程序的刷写起始地址与待刷写程序的运行空间占用信息对应的内存空间大小的取值之和记为刷写结束地址,并且刷写起始地址与刷写结束地址之间的地址是连续的。
S260、若不满足,则生成刷写失败信息并反馈。
在本发明实施例中,当剩余空间小于待刷写程序的运行空间占用信息对应的内存空间大小时,可以确定剩余空间不满足运行空间占用信息,则生成刷写失败信息并反馈,比如,生成刷写失败信息可以为“当前芯片性能不足”等信息,并将失败信息返回给用户。
本发明实施例的技术方案,通过调用数据结构类来接收并存储待刷写程序的代码段、数据段、标定段以及中断数据,并读取待刷写程序的代码内容中的代码文本、全局变量、标定量和中断,然后将代码文本、全局变量、标定量和中断的内存占用量作为运行空间占用信息,以计算出待刷写程序所需的运行内存空间大小;以及通过计算出的待刷写程序所需的运行内存空间大小与内存空间的剩余空间相比较,若内存空间的剩余空间满足待刷写程序所需的运行内存空间大小,则将待刷写程序写入内存空间,以保证待刷写程序的正确刷写,若判断出内存空间的剩余空间不满足待刷写程序所需的运行内存空间大小,给予刷写失败的信息,以供用户可以根据刷写失败信息重新调整工作。
进一步的,图3是本发明实施例二提供的一种代码内容的内存占用量确定的流程图,参见图3,本发明实施例中分别确定代码文本、全局变量、标定量和中断的内存占用量,包括:
S2301,确定代码文本的有效代码行数,并有效代码行数与代码行空间占用系数之积作为代码文本的内存占用量。
其中,有效代码行数可以指待刷写程序中具有实际含义的逻辑代码的行数,可以通过所有代码的总行数减去空行数减去注释行数的方式获得。可以理解的是,代码文本中的有效代码行数可以不包括空行数和注释行数。代码行空间占用系数可以指每行代码占用内存空间的最大长度,可以根据开发者的经验设置,或者,可以由待刷写程序的二进制行代码的平均内存占用长度确定,可以更合理的确定出代码文本的内存占用量。
在本发明实施例中,可以统计代码文本中的有效代码行数,并提取代码行空间占用系数,可以确定有效代码行数与代码行空间占用系数的乘积,可以将该乘积作为代码文本的内存占用量。
示例性的,代码文本的总行数有500行,包含注释和空行共20行,则代码文本的有效代码行数为480行,待刷写程序的二进制行代码的平均内存占用长度可以为2KB,则代码文本的内存占用量为有效代码行数与代码行空间占用系数之积。即代码文本的内存占用量为960KB。
S2302,分别确定各全局变量和各标定量对应的数据结构,将全局变量的各数据结构之和作为全局变量的内存占用量,以及,将标定量的各数据结构之和作为标定量的内存占用量。
其中,数据结构可以是反映全局变量以及标定量数据类型的信息,不同数据结构占用的内存空间的长度可以不同,例如,待刷写程序中有2个全局变量,这2个全局变量的数据结构分别为整型和字符型,整型存储需要的内存空间的长度可以为4字节,字符型存储需要的内存空间的长度可以为2字节,那么全局变量的内存占用量可以为4字节与2字节之和,即全局变量的内存占用量可以为6字节。又例如,标定量包括3个整型,每个整型存储需要的内存空间的长度为2字节,则标定量的内存占用量可以为3*2=6字节。
具体的,可以统计所有全局变量和标定量分别对应的数据结构,并获取各数据结构存储需要的内存占用量,可以将全局变量中各数据结构需要的内存占用量的和作为全局变量的内存占用量,以及,可以将标定量的各数据结构之和作为标定量的内存占用量。
S2303,在预设中断向量表查找中断的最深优先级,将最深优先级中断对应的内存大小与中断的个数之积作为中断的内存占用量。
其中,中断可以指处理器在正常执行程序的过程中,由于内部或外部事件的触发或由程序的预先安排,引起处理器暂时中断当前正在运行的程序,而转去执行为内部或外部事件或程序预先安排的事件的服务子程序,待中断服务子程序执行完毕后,处理器再返回到被暂时中断的程序处(断点)继续执行原来的程序,这一过程称为中断。中断向量表可以认为把系统中所有的中断类型码及其对应的中断向量按一定的规律存放在一个存储区域内,这个存储区域就叫中断向量表,中断向量表中的中断类型码可以为8位二进制数,可以认为是中断服务程序的入口地址,其中,最深优先级可以是待刷写代码具有的最高优先级的中断类型码对应的优先级,中断个数可以是待刷写代码中具有的不同的中断类型码的数量。
具体的,控制器在处理中断时是响应更高级别的中断申请,而屏蔽掉同级或较低级的中断申请,因此,中断的内存占用量与中断个数与中断优先级相关,可以使用中断个数与中断优先级的乘积确定中断的内存占用量。示例性的,如果中断的优先级有8个,中断的最深优先级可以为最高的优先级,该优先级的程序需要占用的内存可以为10KB,则将最深优先级中断对应的内存大小与中断的个数之积作为中断的内存占用量,即中断的内存占用量为80KB。
本发明实施例,通过将有效代码行数与代码行空间占用系数之积作为代码文本的内存占用量,将全局变量的各数据结构之和作为全局变量的内存占用量,以及,将标定量的各数据结构之和作为标定量的内存占用量;并且将最深优先级中断对应的内存大小与中断的个数之积作为中断的内存占用量,可以有效计算出代码文本的内存占用量、全局变量的内存占用量、标定量的内存占用量以及中断的内存占用量,从而可以有效计算出待刷写程序的内存占用量。
示例性实施例,图4是本发明实施例提供的一种控制器的程序刷写方法的实现效果图,如图4所示,实现本发明程序刷写方法的整体类包括MCUStruct_Class类、ReadMCU类、Disposition_Chip类和Generation_LinkFile类。
MCUStruct_Class类是一个数据结构类,MCUStruct_Class类可以用来接收并存储待刷写程序中代码段、数据段、标定段以及中断内存大小的数据。利用该类中的get_CodeSize()函数获取待刷写程序的代码段的值,利用该类中的set_CodeSize()函数设置待刷写程序的代码段的值;利用该类中的get_DataSize()函数获取待刷写程序的数据段的值,利用该类中的set_DataSize()函数设置待刷写程序的数据段的值;利用该类中的get_Calib_DataSize()函数获取待刷写程序的标定段的值,利用该类中的set_Calib_DataSize()函数来设置待刷写程序的标定段的值;利用该类中的get_Interrupt_MemenorySize()函数获取待刷写程序的中断数据的值,利用该类中的set_Interrupt_MemenorySize()函数设置待刷写程序的中断数据的值。
ReadMCU类,此类可以用于读取待刷写程序中的所有代码,然后计算出当前所有代码需要的内存大小,还可以读取所有全局变量需要的内存空间大小、所有标定量需要的内存空间大小以及当前代码在中断情况下所需要的内存空间大小。具体的,该类中的Cal_CodeSize()函数,读取当前程序中所有代码有意义的行数,然后计算出转换成二进制文件后所需要的内存空间大小;该类中Cal_DataSize()函数通过读取待刷写程序中的全局变量,计算全局变量所需要的内存空间大小,Cal_Calib_DataSize()函数可以通过读取待刷写程序的标定量,计算标定量所需要的内存空间大小,Cal_Interrupt_Memory_Size()函数读取待刷写程序中设置的中断向量表的优先级,计算待刷写程序中设置的中断向量表的优先级、该函数涉及的参数以及该函数涉及的临时变量被触发中断时所需的内存空间大小。
Disposition_Chip类,此类中存放着当前芯片具体pflash和dflash相关的起止地址信息。利用该类中的set_ChipSetting()函数设置当前芯片具体的pflash和dflash相关的起止地址的值,利用该类中的get_ChipSetting()函数来获取当前芯片具体的pflash和dflash相关的起止地址的值。
Generation_LinkFile类,此类根据ReadMCU类计算待刷写程序所需的内存大小数据和根据Disposition_Chip类得到芯片数据后,生成一个LinkFile文件。该类中的Generation_File()函数根据当前芯片pflash中的起始地址、大小以及与bootloader的终止地址,将待刷写程序写入pflash中,根据dflash的起始地址、大小,将待刷写程序中的全局变量、标定量以及中断写入dflash中,并确保地址连续,以减少空间的碎片化。
具体的,图5是本发明实施例提供的另一种控制器的程序刷写方法的示例图,参考图5,控制器中的程序刷写可以包括如下步骤:
首先,配置当前芯片pflash和dflash内存大小以及起始地址,然后读取待刷写程序所有源码,判断待刷写程序的源码是否为空,如果是,则打印待刷写程序的代码为空并结束整个流程,如果不为空,则计算待刷写程序代码所需的占用空间大小、计算待刷写程序中全局变量所需的占用空间大小、计算待刷写程序中标定量所需的占用空间大小和预估待刷写程序中中断所需的占用空间大小,然后计算待刷写程序所需要的内存空间大小的总和,并与当前芯片的pfash和dflash进行比较,并判断待刷写程序所需要的内存空间大小的总和是否超出芯片大小,如果超出,则打印当前芯片性能不足并结束整个流程,如果没有,则生成对应的LinkFile文件,并结束整个流程。
实施例三
图6是本发明实施例三提供的一种控制器的程序刷写装置的结构框图,该装置可执行本发明任意实施例所提供的控制器的程序刷写方法,具备执行方法相应的功能模块和有益效果。所述装置配置于控制器中来实现本发明实施例中的控制器的程序刷写方法。如图6所示,所述装置包括:程序接收模块610、空间信息模块620和程序刷写模块630。
其中,程序接收模块610,用于根据预设存储结构获取待刷写程序。
空间信息模块620,用于确定所述待刷写程序的代码内容的运行空间占用信息。
程序刷写模块630,用于基于刷写起始地址和所述运行空间占用信息将所述待刷写程序写入内存空间。
本发明实施例的技术方案,程序接收模块通过根据预设存储结构获取待刷写程序,空间信息模块确定所述待刷写程序的代码内容的运行空间占用信息,程序刷写模块基于刷写起始地址和所述运行空间占用信息将所述待刷写程序写入内存空间。上述技术方案,采用基于预估待刷写程序的运行内存大小以及起始地址的方式将待刷写程序写入内存空间,有效节省了内存空间,可提高程序刷写的成功率,从而提高控制器运行的稳定性,可以减少确定待刷写程序运行参数的测试时间,可提高控制器的开发效率。
进一步的,在上述装置中,程序接收模块610具体用于:
调用数据结构类接收并存储所述待刷写程序的代码段、数据段、标定段以及中断数据。
进一步的,上述装置中,空间信息模块620包括代码读取单元和内存确定单元:
所述代码读取单元,用于读取所述待刷写程序的代码内容,其中,所述代码内容包括:代码文本、全局变量、标定量和中断。
所述内存确定单元,用于分别确定代码文本、全局变量、标定量和中断的内存占用量,并将各所述内存占用量作为运行空间占用信息。
进一步的,上述装置中,所述内存确定单元包括行数确定子单元、结构确定子单元和查找子单元:
所述行数确定子单元,用于确定所述代码文本的有效代码行数,并所述有效代码行数与代码行空间占用系数之积作为所述代码文本的内存占用量。
所述结构确定子单元,用于分别确定各所述全局变量和各所述标定量对应的数据结构,将所述全局变量的各所述数据结构之和作为所述全局变量的内存占用量,以及,将所述标定量的各所述数据结构之和作为所述标定量的内存占用量。
所述查找子单元,用于在预设中断向量表查找所述中断的最深优先级,将所述最深优先级中断对应的内存大小与所述中断的个数之积作为所述中断的内存占用量。
进一步的,上述装置中,所述代码行空间占用系数包括:所述待刷写程序的二进制行代码的平均内存占用长度。
进一步的,上述装置中,程序刷写模块630具体用于:
确定所述内存空间的剩余空间是否满足所述运行空间占用信息;若满足,则在所述内存空间的预设区域读取所述待刷写程序的刷写起始地址,并按照所述刷写起始地址将所述待刷写程序写入所述内存空间;若不满足,则生成刷写失败信息并反馈。
进一步的,上述装置中,在程序刷写模块630之后,还包括更新模块:
所述更新模块,用于根据所述待刷写程序的运行空间占用信息更新所述刷写起始地址。
上述产品可执行本发明实施例所提供的控制器的程序刷写方法,具备执行方法相应的功能模块和有益效果。
实施四
本发明实施例四提供了一种控制器。图7是本发明实施例四提供的一种控制器的结构示意图。如图7所示,本实施例提供了一种控制器,可以包括:中央处理器和存储器。存储器中存储有至少一条指令,且指令由所述中央处理器执行,使得所述控制器执行如上述方法实施例所述的控制器的程序刷写方法。
参照图7,该控制器具体可以包括:中央处理器720、存储器710、输入装置730和输出装置740;该控制器中中央处理器720的数量可以是一个或多个,图7中以一个中央处理器720为例;该控制器中存储器710的数量可以是一个或者多个,图7中以一个存储器710为例。该控制器中的中央处理器720、存储器710、输入装置730和输出装置740可以通过总线或其他方式连接,图7中以通过总线连接为例。
具体的,实施例中,中央处理器720执行存储器710中存储的一个或多个程序时,可以实现如下操作:根据预设存储结构获取待刷写程序;
确定所述待刷写程序的代码内容的运行空间占用信息;
基于刷写起始地址和所述运行空间占用信息将所述待刷写程序写入内存空间。
上述实施例中提供的控制器的程序刷写方法、装置、控制器和存储介质可执行本发明任意实施例所提供的控制器的程序刷写方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的控制器的程序刷写方法。
实施例五
本发明实施例五提供了一种计算机可读存储介质,其上存储有程序,该程序被中央处理器执行时实现如本发明所有发明实施例提供的控制器的程序刷写方法,该方法包括:根据预设存储结构获取待刷写程序;确定所述待刷写程序的代码内容的运行空间占用信息;基于刷写起始地址和所述运行空间占用信息将所述待刷写程序写入内存空间。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (10)

1.一种控制器的程序刷写方法,其特征在于,所述方法包括:
根据预设存储结构获取待刷写程序;
确定所述待刷写程序的代码内容的运行空间占用信息;
基于刷写起始地址和所述运行空间占用信息将所述待刷写程序写入内存空间。
2.根据权利要求1所述的方法,其特征在于,所述根据预设存储结构获取待刷写程序,包括:
调用数据结构类接收并存储所述待刷写程序的代码段、数据段、标定段以及中断数据。
3.根据权利要求1所述的方法,其特征在于,所述确定所述待刷写程序的代码内容的运行空间占用信息,包括:
读取所述待刷写程序的代码内容,其中,所述代码内容包括:代码文本、全局变量、标定量和中断;
分别确定代码文本、全局变量、标定量和中断的内存占用量,并将各所述内存占用量作为运行空间占用信息。
4.根据权利要求3所述的方法,其特征在于,所述分别确定代码文本、全局变量、标定量和中断的内存占用量,包括:
确定所述代码文本的有效代码行数,并所述有效代码行数与代码行空间占用系数之积作为所述代码文本的内存占用量;
分别确定各所述全局变量和各所述标定量对应的数据结构,将所述全局变量的各所述数据结构之和作为所述全局变量的内存占用量,以及,将所述标定量的各所述数据结构之和作为所述标定量的内存占用量;
在预设中断向量表查找所述中断的最深优先级,将所述最深优先级中断对应的内存大小与所述中断的个数之积作为所述中断的内存占用量。
5.根据权利要求4所述的方法,其特征在于,所述代码行空间占用系数包括:所述待刷写程序的二进制行代码的平均内存占用长度。
6.根据权利要求1所述的方法,其特征在于,所述基于刷写起始地址和所述运行空间占用信息将所述待刷写程序写入内存空间,包括:
确定所述内存空间的剩余空间是否满足所述运行空间占用信息;
若满足,则在所述内存空间的预设区域读取所述待刷写程序的刷写起始地址,并按照所述刷写起始地址将所述待刷写程序写入所述内存空间;
若不满足,则生成刷写失败信息并反馈。
7.根据权利要求1-6中任一所述的方法,其特征在于,在所述基于刷写起始地址和所述运行空间占用信息将所述待刷写程序写入内存空间之后,还包括:
根据所述待刷写程序的运行空间占用信息更新所述刷写起始地址。
8.一种控制器的程序刷写装置,其特征在于,所述装置包括:
程序接收模块,用于根据预设存储结构获取待刷写程序;
空间信息模块,用于确定所述待刷写程序的代码内容的运行空间占用信息;
程序刷写模块,用于基于刷写起始地址和所述运行空间占用信息将所述待刷写程序写入内存空间。
9.一种控制器,其特征在于,所述控制器包括:
一个或多个中央处理器;
存储器,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个中央处理器执行,使得所述一个或多个中央处理器实现如权利要求1-7中任一所述的控制器的程序刷写方法。
10.一种计算机可读存储介质,其上存储有程序,其特征在于,所述程序被中央处理器执行时实现如权利要求1-7中任一所述的控制器的程序刷写方法。
CN202111208423.9A 2021-10-18 2021-10-18 控制器的程序刷写方法、装置、控制器和存储介质 Pending CN113885917A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202111208423.9A CN113885917A (zh) 2021-10-18 2021-10-18 控制器的程序刷写方法、装置、控制器和存储介质
PCT/CN2022/125868 WO2023066233A1 (zh) 2021-10-18 2022-10-18 控制器的程序刷写方法、装置、控制器和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111208423.9A CN113885917A (zh) 2021-10-18 2021-10-18 控制器的程序刷写方法、装置、控制器和存储介质

Publications (1)

Publication Number Publication Date
CN113885917A true CN113885917A (zh) 2022-01-04

Family

ID=79003212

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111208423.9A Pending CN113885917A (zh) 2021-10-18 2021-10-18 控制器的程序刷写方法、装置、控制器和存储介质

Country Status (2)

Country Link
CN (1) CN113885917A (zh)
WO (1) WO2023066233A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115185615A (zh) * 2022-09-09 2022-10-14 湖南三湘银行股份有限公司 基于内存空间优化的插件程序调用方法
CN115903747A (zh) * 2022-11-29 2023-04-04 成都赛力斯科技有限公司 一种数据标定方法、装置、设备及存储介质
WO2023066233A1 (zh) * 2021-10-18 2023-04-27 中国第一汽车股份有限公司 控制器的程序刷写方法、装置、控制器和存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3835969B2 (ja) * 2000-04-13 2006-10-18 本田技研工業株式会社 車両制御装置のための書き換えシステム
CN100405325C (zh) * 2006-08-21 2008-07-23 北京中星微电子有限公司 一种嵌入式软件装载调试方法及其系统
CN103745153B (zh) * 2013-12-30 2015-07-08 北京控制工程研究所 一种航天器软件空间使用安全性检查方法
CN105302618A (zh) * 2015-12-05 2016-02-03 中国航空工业集团公司洛阳电光设备研究所 一种asaac标准数字信号处理模块快速烧写方法
US10942725B2 (en) * 2018-07-30 2021-03-09 Ford Global Technologies, Llc Over the air Ecu update
CN109324813A (zh) * 2018-08-16 2019-02-12 深圳市元征科技股份有限公司 电子控制系统刷写方法、装置及计算机介质
CN111722864A (zh) * 2020-06-24 2020-09-29 深圳市元征科技股份有限公司 一种ecu数据刷写方法及相关装置
CN112579135A (zh) * 2020-12-22 2021-03-30 潍柴动力股份有限公司 用于车辆控制单元的刷写控制方法、系统及车辆
CN113885917A (zh) * 2021-10-18 2022-01-04 中国第一汽车股份有限公司 控制器的程序刷写方法、装置、控制器和存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023066233A1 (zh) * 2021-10-18 2023-04-27 中国第一汽车股份有限公司 控制器的程序刷写方法、装置、控制器和存储介质
CN115185615A (zh) * 2022-09-09 2022-10-14 湖南三湘银行股份有限公司 基于内存空间优化的插件程序调用方法
CN115185615B (zh) * 2022-09-09 2022-12-02 湖南三湘银行股份有限公司 基于内存空间优化的插件程序调用方法
CN115903747A (zh) * 2022-11-29 2023-04-04 成都赛力斯科技有限公司 一种数据标定方法、装置、设备及存储介质

Also Published As

Publication number Publication date
WO2023066233A1 (zh) 2023-04-27

Similar Documents

Publication Publication Date Title
CN113885917A (zh) 控制器的程序刷写方法、装置、控制器和存储介质
US8381194B2 (en) Methods and apparatuses for selective code coverage
CN110569106A (zh) 代码加载方法、装置、电子设备及计算机可读介质
CN108205469B (zh) 一种基于MapReduce的资源分配方法及服务器
CN109828859B (zh) 移动终端内存分析方法、装置、存储介质及电子设备
CN110598855A (zh) 深度学习模型生成方法、装置、设备及存储介质
JP2007286671A (ja) ソフトウェア/ハードウェア分割プログラム、および分割方法。
CN109032612B (zh) 混合型应用的接口调用方法、装置及计算机可读存储介质
CN115827162A (zh) 一种智能化处理镜像仓库数据方法、装置、介质及设备
CN109558145B (zh) 一种面向安卓应用的安装包体积优化方法及装置
CN110287202B (zh) 数据更新方法、装置、电子设备及存储介质
CN108829345B (zh) 日志文件的数据处理方法和终端设备
CN116483546B (zh) 分布式训练任务调度方法、装置、设备及存储介质
WO2023221626A1 (zh) 一种内存分配的方法和装置
US20240104016A1 (en) Intermediate Representation Method and Apparatus for Compiling Computation Graphs
JP4342392B2 (ja) ソフトウェア検証モデル生成方法
CN113158177A (zh) 一种动态度量方法、装置、设备及存储介质
JP2012103923A (ja) コンパイラ装置、コンパイル方法及びコンパイラプログラム
CN115437675A (zh) 一种应用程序在线升级方法、装置、设备及介质
CN113141407B (zh) 一种页面资源加载方法、装置和电子设备
CN111913812B (zh) 一种数据处理方法、装置、设备及存储介质
CN113590221B (zh) 着色器变体数量的检测方法、装置、电子设备及存储介质
CN110378037B (zh) 基于Ceph的CFD仿真数据存储方法、装置及服务器
CN114564502A (zh) 一种基于Redis缓存技术的电力数据补抄方法和系统
CN108874560B (zh) 进行通信的方法和通信设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination