一种下载目标文件的方法及系统的制作方法

文档序号:6461872阅读:213来源:国知局
专利名称:一种下载目标文件的方法及系统的制作方法
技术领域
本发明涉及电子技术领域,具体涉及一种下载目标文件的方法及系统。
技术背景随着单片机技术的不断应用,用于单片机控制的代码和数据量也越来越 大。当用户利用计算机对单片机的控制程序进行仿真和调试时,首先需要将 源程序进行编译、链接等过程,生成可执行机器代码,即目标文件,然后将 目标文件下载到调试装置进行调试,例如下载到调试装置的随机存取存储器(RAM)中;当在调试过程中出现问题时,需要对源程序进行修改,并继 续上述编译、链接、下载并调试的过程。调试成功后,再将单片机控制程序 存储到只读存储器(ROM) 、 Flash等非易失性存储器中,用于销售或供用 户使用。因此,用户在单片机开发过程中,需要经常修改源程序,并频繁地 将源程序生成的目标文件下载到调试装置。现有技术中,在每次修改源程序 后,都需要重新下载由源程序生成的目标文件,这样,当源程序较大,生成 的目标文件数据量较大时,下载所需的时间较长,因此极大地降低了开发效 率。其中,调试装置包括但不限于单片机、控制装置仿真板、在线仿真器以 及开发板等具有实时仿真接口,供软件运行的硬件平台。如现有u,nSP集成开发环境(IDE )的程序开发过程首先用户通过IDE 编写程序,然后通过C编译器、或汇编器、对程序中采用C语言(.c)或汇 编语言(.asm)编写的源程序进行编译,生成一机器代码文件(.obj),如 程序中涉及库文件(.lib)的,还要再通过链接器对该库文件进行链接,最 后生成一可执行机器代码,即目标文件(.s37)。将该目标文件下载到开发板即可实现在线仿真功能。而用户在开发过程中需要经常修改源程序,因此 会频繁进行下载的操作,每次下载都需要将修改后的源程序所对应的目标文 件全部下载一次,因此极大的降低了开发效率。发明内容有鉴于此,本发明提供一种下载目标文件的方法,加快目标文件的下载速度。本发明还提供一种下载目标文件的系统,加快目标文件的下载速度。为达到上述目的,本发明的技术方案是这样实现的一种下载目标文件的方法,将由第 一源程序生成的第一 目标文件下载到 调试装置,修改所述第一源程序,得到第二源程序,生成所述第二源程序对 应的第二目标文件,该方法还包括将所述第一目标文件与所述第二目标文 件进行比较,生成所述第二目标文件与所述第一 目标文件之间的差异目标文 件;向所述调试装置下载所述差异目标文件。可见,与现有技术相比,本发 明所提供的技术方案,在将第一源程序对应的第一目标文件下载到调试装 置,并修改了第一源程序得到第二源程序之后,将第二源程序生成的第二目 标文件与第 一源程序生成的第 一 目标文件进行比较,得到第二目标文件与第 一目标文件之间的差异目标文件,并将差异目标文件下载到调试装置。从而, 充分利用了 PC机的处理能力及速度优势,将大量复杂的比较工作放到PC 端,通过只下载第二目标文件与第一目标文件之间的差异,减小了对单片机 调试过程中,所需重复下载的数据量,加快了源程序对应的目标文件的下载 速度,从而减少了下载时间,提高了单片机控制程序的开发效率,避免了全 部下载第二目标文件所造成的下载数据量大、下载时间长、从而降低单片机 控制程序开发效率的问题。较佳地,所述将第一目标文件与第二目标文件进行比较之前,该方法进 一步包括将所述第一目标文件和所述第二目标文件分别转换为一个以上第 一链表节点和一个以上第二链表节点;分别链接所述一个以上第 一链表节点和所述一个以上第二链表节点生成第一链表和第二链表;其中,所述将第一目标文件与第二目标文件进行比较包括将所述第一链表中的第一链表节点与所述第二链表中的第二链表节点依次进行比较。可见,本发明较佳实施例 中,将目标文件转换为多个链表节点,然后对链表节点进行比较,减少了PC端对緩存单元及处理能力的耗用量。较佳地,所述第 一 目标文件和第二目标文件中的每一行包括数据及其对 应的起始地址和数据长度;所述将第一 目标文件和第二目标文件分别转换为 一个以上第一链表节点和一个以上第二链表节点包括将所述第一目标文件 和所述第二目标文件分别加载到第一緩存单元和第二緩存单元;扫描所述第 一緩存单元和所述第二緩存单元,分别将所述第一目标文件与第二目标文件 中起始地址连续的数据合并为数据块,得到第 一 目标文件对应的一个以上数 据块,及第二目标文件对应的一个以上数据块;将合并生成的一个以上数据 块增加对应的起始地址和数据块长度,生成一个以上第一链表节点和一个以 上第二链表节点。可见,本发明较佳实施例中,将地址连续的数据合并为一 个数据块,形成链表节点,从而将目标文件转换为一个以上的链表节点,然 后以链表节点为单位进行比较处理,从而提高了比较速度和效率,进一步提 高了单片机程序的开发效率。较佳地,所述分别链接一 个以上第 一链表节点和 一 个以上第二链表节点 生成第一链表和第二链表包括根据所述第一链表节点和第二链表节点中的 起始地址,分别对所述第 一链表节点和第二链表节点进行排序并用链表形式 链接起来,得到第一链表和第二链表。可见,本发明较佳实施例中,将多个 链表节点按照起始地址的顺序重新排列,从而提高了对链表节点进行比较的 效率,减小了由于第 一 目标文件中第 一链表节点的起始地址与第二目标文件 中第二链表节点的起始地址的排列顺序不一致而产生的差异,进一步提高了 单片机程序的开发效率。其中,所述将第 一链表中的第 一链表节点与第二链表中的第二链表节点依 次进行比较,生成所述第二目标文件与所述第一目标文件之间的差异目标文件包括如果所述第二链表节点的起始地址大于或等于所述第一链表节点的起始 地址与所述第 一链表节点的数据块长度之和,则直接将所述第二链表节点与下 一个第一链表节点进行比较;如果所述第二链表节点的起始地址与数据块长度 之和小于或等于所述第一链表节点的起始地址,则将所述第二链表节点记录为 差异链表节点,并将下一个第二链表节点与所述第一链表节点进行比较;如果 所述第二链表节点的起始地址及数据块长度与所述第 一链表节点的起始地址与 数据块长度分別相等,则将所述第二链表节点与所述第一链表节点之间的差异 记录为差异链表节点;将比较得到的差异链表节点转换为差异目标文件。进一步地,所述将比较得到的差异链表节点转换为差异目标文件之前,该 方法进一步包括如果所述第二链表节点的起始地址大于所述第一链表节点的 起始地址,且所述第二链表节点的起始地址与数据块长度之和小于所述第一链 表节点的起始地址与数据块长度之和,则将所述第一链表节点划分为起始地 址为所述第一链表节点的起始地址,数据块长度为第二链表节点的起始地址与 第一链表节点的起始地址之差的第一子链表节点,起始地址为所述第二链表节 点的起始地址,数据块长度为所述第二链表节点的数据块长度的第二子链表节 点,及起始地址为所述第二链表节点的起始地址与数据块长度之和,数据块长 度为所述第 一链表节点的数据块长度与所迷第 一子链表节点及第二子链表节点 的数据块长度之差的第三子链表节点;将所述第二链表节点与所述第二子链表 节点之间的差异记录为差异链表节点,并继续下一个第二链表节点与所述第三 子链表节点的比较。进一步地,所述将比较得到的差异链表节点转换为差异目标文件之前,该 方法进一步包括如果所述第二链表节点的起始地址小于所述第一链表节点的 起始地址,且所述第二链表节点的起始地址与数据块长度之和大于所述第一链 表节点的起始地址与数据块长度之和,则将所述第二链表节点划分为起始地 址为所述第二链表节点的起始地址,数据块长度为所述第 一链表节点的起始地 址与所述第二链表节点的起始地址之差的第一子链表节点,起始地址为所述第 一链表节点的起始地址,数据块长度为所述第 一链表节点的数据块长度的第二子链表节点,及起始地址为所述第一链表节点的起始地址与数据块长度之和, 数据块长度为所述第二链表节点的数据块长度与所述第一子链表节点及第二子链表节点的数据块长度之差的第三子链表节点;将所述第 一子链表节点记录为 差异链表节点;将所述第一链表节点与所述第二子链表节点之间的差异记录为 差异链表节点,并继续所述第三子链表节点与下一个第一链表节点的比较。进一步地,所述将比较得到的差异链表节点转换为差异目标文件之前,该 方法进一步包括如果所述第二链表节点的起始地址大于所述第一链表节点的 起始地址,且所述第二链表节点的起始地址与数据块长度之和大于或等于所述 第 一链表节点的起始地址与数据块长度之和,则将所述第 一链表节点划分为 起始地址为所述第一链表节点的起始地址,数据块长度为所述第二链表节点的 起始地址与所述第一链表节点的起始地址之差的第一子链表节点,及起始地址 为所述第二链表节点的起始地址,数据块长度为所述第 一链表节点的数据块长 度与所述第 一子链表节点的数据块长度之差的第二子链表节点;将所述第二链 表节点划分为起始地址为所述第二链表节点的起始地址,数据块长度为所迷 第二子链表节点的数据块长度的第三子链表节点,及起始地址为所述第二链表 节点的起始地址与所述第三子链表节点的数据块长度之和,数据块长度为所述 第二链表节点的数据块长度与所述第三子链表节点的数据块长度之差的第四子 链表节点;将所述第三子链表节点与所述第二子链表节点之间的差异记录为差 异链表节点;并继续所述第四子链表节点与下一个第一链表节点的比较。进一步地,所述将比较得到的差异链表节点转换为差异目标文件之前,该 方法进一步包括如果所述第二链表节点的起始地址小于所述第一链表节点的 起始地址,且所述第二链表节点的起始地址与数据块长度之和小于或等于所述 第一链表节点的起始地址与数据块长度之和,则将所述第二链表节点划分为 起始地址为所述第二链表节点的起始地址,数据块长度为所述第 一链表节点的 起始地址与所述第二链表节点的起始地址之差的第 一子链表节点,及起始地址 为所述第 一链表节点的起始地址,数据块长度为所述第二链表节点的数据块长 度与所述第 一子链表节点的数据块长度之差的第二子链表节点;将所述第 一链12表节点划分为起始地址为所述第一链表节点的起始地址,数据块长度为所述第二子链表节点的数据块长度的第三子链表节点,及起始地址为所述第一链表 节点的起始地址与所述第三子链表节点的数据块长度之和,数据块长度为所述 第 一链表节点的数据块长度与所述第三子链表节点的数据块长度之差的第四子链表节点;将所迷第一子链表节点记录为差异链表节点;将所述第二子链表节 点与所述第三子链表节点之间的差异记录为差异链表节点;并继续下一个第二 链表节点与所述第四子链表节点的比较。较佳地,所迷将第二链表节点与第一链表节点之间的差异记录为差异链表 节点包括比较所述第二链表节点与所述第 一链表节点中的数据块的对应字节; 如果所述对应字节的内容不同,则生成所述第二链表节点中对应字节的内容的 差异链表节点,或将所述第二链表节点中对应字节的内容的接续到已生成的差 异链表节点中。较佳地,所述将比较得到的差异链表节点转换为差异目标文件之前,该方 法进一步包括将比较得到的差异链表节点的起始地址与预先存储的单片机存 储器的范围进行比较,如杲超出该范围,则删除该差异链表节点。一种下载目标文件的系统,包括程序修改单元、目标文件生成单元、比 较单元、差异目标文件生成单元和下载单元,所述目标文件生成单元,用于生成第一源程序对应的第一目标文件;生成 所述程序修改单元修改得到的第二源程序对应的第二目标文件;所述程序修改单元,用于对所述第一源程序进行修改;所述比较单元,用于将所述目标文件生成单元生成的第一 目标文件和第二 目标文件进行比较,生成所述第二目标文件与所述第一目标文件之间的差异目 标文件;所述下载单元,用于向调试装置下载所述第一源程序对应的第一 目标文件 及所述比较单元生成的差异目标文件。较佳地,所述比较单元包括第一数据合并链接单元,用于将所述目标 文件生成单元的第一目标文件转换为一个以上第一链表节点,将所述一个以上第一链表节点链接为第一链表;第二数据合并链接单元,用于将所述目标文件生成单元的第二目标文件转换为 一 个以上第二链表节点,将所述一 个以上第二链表节点链接为第二链表;差异比较单元,用于将所述第一数据合并 链接单元的第 一链表中的第 一链表节点与所述第二数据合并链接单元的第 二链表中的第二链表节点进行比较,得到差异链表文件;以及差异链表文件 转换单元,用于将所述差异比较单元的差异链表文件转换为所述第二目标文 件与所述第一 目标文件之间的差异目标文件。


图1为本发明较佳实施例中下载目标文件的方法流程图; 图2为本发明较佳实施例中目标文件的格式图; 图3为本发明较佳实施例中链表的格式图; 图4A为本发明较佳实施例中比较链表节点时第 一种情况的示意图 图4B为本发明较佳实施例中比较链表节点时第二种情况的示意图 图4C为本发明较佳实施例中比较链表节点时第三种情况的示意图 图4D为本发明较佳实施例中比较链表节点时第四种情况的示意图 图4E为本发明较佳实施例中比较链表节点时第五种情况的示意图 图4F为本发明较佳实施例中比较链表节点时第六种情况的示意图 图4G为本发明较佳实施例中比较链表节点时第七种情况的示意图行比较的方法流程图;图6为本发明较佳实施例中下载目标文件的系统结构图。
具体实施方式
本发明提供的下载目标文件的方法,将由第一源程序生成的第一目标文 件下载到调试装置,修改第一源程序,得到第二源程序,生成第二源程序对 应的第二目标文件;然后将第一目标文件与第二目标文件进行比较,生成第二目标文件与第一目标文件之间的差异目标文件;最后向调试装置下载生成的差异目标文件。下面结合附图及具体实施例对本发明进行详细说明。图1为本发明较佳实施例中下载目标文件的方法流程图。如图l所示,本发明下载目标文件的方法包括以下步骤步骤102:将由第一源程序对应的第一目标文件下载到调试装置,修改 所述第一源程序,得到第二源程序,生成所述第二源程序对应的第二目标文件。本步骤中,由源程序生成目标文件的过程为现有技术,在此不再赘述。 对第一源程序进行修改,为根据单片机控制程序的调试需要,对第一源程序 进行修改,得到第二源程序。步骤104:将第一目标文件和第二目标文件分别转换为一个以上第一链 表节点和一个以上第二链表节点;分别链接一个以上第一链表节点和一个以上第二链表节点生成第 一链表和第二链表。本步骤中,首先将第一和第二目标文件分别加载到第一和第二緩存单元 中。例如,将用户需要下载的第二目标文件(new.s37)加载到第二内存緩 冲区中,同时将上一次下载的第一目标文件(old.s37)加载到第一内存緩沖 区中。具体来说,至少将目标文件的数据长度、起始地址及数据加载到緩存 单元中。例如,图2为本发明较佳实施例中u,nSP IDE的目标文件(.s37 ) 的文件格式图,如图2所示,目标文件的每一行包括起始标记、数据长度、 起始地址、数据及校验码。其中,起始标记可以为待下载数据的标记和非下 载数据的标记,数据长度为本行数据的字节数,起始地址为本行数据下载到 调试装置的目标地址时,校验码是为了减小数据下载错误,根据一定的纠错 算法计算得到的校验码。在将目标文件加载到緩存单元中时,为了减少占用緩存单元的空间,可以只将数据长度、起始地址及数据加载到緩存单元中。 然后,扫描第一緩存单元,将起始地址连接的数据合并为新的数据块, 得到第一目标文件对应的一个以上数据,在每个数据块之前增加对应的起始地址及数据块长度,生成一个以上第一链表节点;根据各个第一链表节点的起始地址,按照一定的顺序,例如升序或降序,将一个以上第一链表节点链接为第一链表;扫描第二緩存单元,将起始地址连接的数据合并为另一新的 数据块,得到第二目标文件对应的一个以上数据,在每个数据块之前增加对 应的起始地址及数据块长度,生成一个以上第二链表节点;根据各个第二链 表节点的起始地址,按照一定的顺序,例如升序或降序,将一个以上第二链 表节点链接为第二链表。即将所有地址连续的数据合并成一个数据块,数据 块和数据块之间用链表形式链接起来。当然,在緩存单元的空间足够大,且 计算机处理能力足够强的情况下,也可以将目标文件的每一行作为 一个链表 节点,然后对链表节点链接为链表文件。图3为本发明较佳实施例中链表的 格式图,如图3所示,链表包括一个以上链表节点,每个链表节点包括数据 块及对应的起始地址和数据块长度,其中起始地址表示该数据块下载到调试 装置的目标地址。步骤106:将第一链表中的第一链表节点与第二链表中的第二链表节点 依次进行比较,生成差异链表文件。本步骤中,对一个以上第一链表节点和一个以上第二链表节点进行比较 的过程中,对于位于调试装置不同存储位置的数据块使用不同的处理方法, 第一链表节点中的数据块与第二链表节点中的数据块在调试装置中的位置 关系可以包括图4A-4G所描述的几种情况,其中纵向为存储地址,向上为 存储地址减小的方向,向下为存储地址增大的方向。图4A为本发明较佳实施例中比较链表节点时第一种情况的示意图,如 图4A所示,第二链表节点的起始地址(即第二链表节点的数据块的起始地 址)大于或等于第 一链表节点的起始地址与第 一链表节点的数据块长度之 和,也就是说第二链表节点的数据块在调试装置中的存储位置位于第一链表 节点的数据块在调试装置中的存储位置之后,则直接将第二链表节点与下一 个第一链表节点进行比较。图4B为本发明较佳实施例中比较链表节点时第二种情况的示意图,如图4B所示,第二链表节点的起始地址与数据块长度之和小于或等于第一链表节点的起始地址,即第二链表节点中的数据块在调试装置中的存储位置位 于第 一链表节点中的数据块在调试装置中的存储位置之前,则将第二链表节 点记录为差异链表节点,并将下一个第二链表节点与第一链表节点进行比较。图4C为本发明较佳实施例中比较链表节点时第三种情况的示意图,如 图4C所示,第二链表节点的起始地址及数据块长度与第一链表节点的起始 地址与数据块长度分別相等,则将第二链表节点与第 一链表节点之间的差异 记录为差异链表节点。下面详细说明起始地址及长度分别相同的两个数据块进行比较,并将两 个数据块之间的差异记录为差异链表节点的过程。图5为本发明较佳实施例 中起始地址和长度分别相同的两个数据块进行比较的方法流程图,如图5所 示,该方法包括以下步骤步骤502:输入两个数据块,这两个数据块的起始地址和长度均相等。步骤504:比较两个数据块对应字节的内容。步骤506:如果两个数据块对应字节的内容相等,则执行步骤510,否 则执行步骤508。步骤508:生成包含本次比较差异的差异链表节点,或将差异接续在已 生成的差异链表节点中。在本步骤中,将第二链表节点的数据块中内容与第一链表节点中数据块的对应字节内容不同的第一个字节记录为差异链表节点,在后面的循环中, 如果下一个内容不同的字节与前一个内容不同的字节的地址是连续的,则将 第二链表节点中该字节的内容接续在已生成的差异链表节点中,如果不连 续,则按照第一个内容不同的字节的记录方法,生成新的差异链表节点。步骤510 步骤512:比较下一个字节,并判断是否将这两个数据块比较 完毕,没有比较完毕,则返回执行步骤504,否则结束。以上所描述的三种情况是对于各种关系的第 一链表节点与第二链表节点进行比较的基本情况,其它情况均可以通过将第 一链表节点或第二链表节 点的划分为多个子链表节点,转换为以上三种基本关系,从而实现一个以上 第 一链表节点与 一个以上第二链表节点的比较。图4D为本发明较佳实施例中比较链表节点时第四种情况的示意图,如 图4D所示,第二链表节点的起始地址大于第一链表节点的起始地址,且第 二链表节点的起始地址与数据块长度之和小于第一链表节点的起始地址与 数据块长度之和,即第二链表节点的数据块在调试装置中的存储位置位于第 一链表节点的数据块在调试装置中存储位置的范围之内,则将第 一链表节点 划分为以下三个子链表节点起始地址为第一链表节点的起始地址,数据块长度为第二链表节点的起始 地址与第 一链表节点的起始地址之差的第 一子链表节点,起始地址为第二链表 节点的起始地址,数据块长度为第二链表节点的数据块长度的第二子链表节点, 以及起始地址为第二链表节点的起始地址与数据块长度之和,数据块长度为第 一链表节点的数据块长度与第一子链表节点及第二子链表节点的数据块长度之 差的第三子链表节点。然后按照图5所示的方法,将第二链表节点与第二子链表节点之间的差异 记录为差异链表节点,并继续下一个第二链表节点与第三子链表节点的比较。图4E为本发明较佳实施例中比较链表节点时第五种情况的示意图,如 图4E所示,第二链表节点的起始地址小于第一链表节点的起始地址,且第 二链表节点的起始地址与数据块长度之和大于第一链表节点的起始地址与 数据块长度之和,则将第二链表节点划分为以下三个子链表节点起始地址为第二链表节点的起始地址,数据块长度为第 一链表节点的起始 地址与第二链表节点的起始地址之差的第 一子链表节点,起始地址为第 一链表 节点的起始地址,数据块长度为第 一链表节点的数据块长度的第二子链表节点, 及起始地址为第一链表节点的起始地址与数据块长度之和,数据块长度为第二 链表节点的数据块长度与第 一子链表节点及第二子链表节点的数据块长度之差 的第三子链表节点。然后将第一子链表节点记录为差异链表节点;按照图5所示的方法,将第 一链表节点与第二子链表节点之间的差异记录为差异链表节点,并继续第 三子链表节点与下一个第 一链表节点的比较。图4F为本发明较佳实施例中比较链表节点时第六种情况的示意图,如 图4F所示,第二链表节点的起始地址大于第一链表节点的起始地址,且第 二链表节点的起始地址与数据块长度之和大于或等于第 一链表节点的起始 地址与数据块长度之和,则将第 一链表节点划分为以下两个子链表节点起始地址为第一链表节点的起始地址,数据块长度为第二链表节点的起始 地址与第一链表节点的起始地址之差的第 一子链表节点,及起始地址为第二链 表节点的起始地址,数据块长度为第 一链表节点的数据块长度与第 一子链表节 点的数据块长度之差的第二子链表节点。并将第二链表节点划分为以下两个子链表节点起始地址为第二链表节点的起始地址,数据块长度为第二子链表节点的数 据块长度的第三子链表节点,及起始地址为第二链表节点的起始地址与第三子 链表节点的数据块长度之和,数据块长度为第二链表节点的数据块长度与第三 子链表节点的数据块长度之差的第四子链表节点。然后按照图5所示的方法,将第三子链表节点与第二子链表节点之间的差 异记录为差异链表节点;并继续第四子链表节点与下一个第一链表节点的比较。图4G为本发明较佳实施例中比较链表节点时第七种情况的示意图,如图 4G所示,第二链表节点的起始地址小于第一链表节点的起始地址,且第二链表 节点的起始地址与数据块长度之和小于或等于第一链表节点的起始地址与数据 块长度之和,则将第二链表节点划分为以下两个子链表节点起始地址为第二链表节点的起始地址,数据块长度为第一链表节点的起始 地址与第二链表节点的起始地址之差的第一子链表节点,M始地址为第一链 表节点的起始地址,数据块长度为第二链表节点的数据块长度与第一子链表节 点的数据块长度之差的第二子链表节点。并将第 一链表节点划分为以下两个子链表节点19起始地址为第一链表节点的起始地址,数据块长度为第二子链表节点的数 据块长度的第三子链表节点,及起始地址为第一链表节点的起始地址与第三子 链表节点的数据块长度之和,数据块长度为第 一链表节点的数据块长度与第三 子链表节点的数据块长度之差的第四子链表节点。然后将第一子链表节点记录为差异链表节点;按照图5所示的方法,将第 二子链表节点与第三子链表节点之间的差异记录为差异链表节点;并继续下一 个第二链表节点与第四子链表节点的比较。按照以上方法,对第 一链表中的 一个以上第 一链表节点和第二链表中的 一个以上第二链表节点进行比较,得到一个以上差异链表节点,这些差异链 表节点组成了差异链表文件。步骤108:将差异链表文件转换为可下载的差异目标文件。本步骤是将目标文件转换为链表的逆过程,具体来说,就是将差异链表 文件的每个差异链表节点增加起始标记和校验码之后,以目标文件的格式表 示出来,从而将差异链表文件转换为差异目标文件。其中起始标记可以是待 下载数据的起始标记或非下载数据的起始标记;校验码可以是根据目标文件 所使用的校验方案得出的校验码。步骤110:向调试装置下载差异目标文件。本步骤中,按照差异目标文件中每一行的起始标记和起始地址,将差异 目标文件下载到调试装置的存储器中,由于该调试装置的存储器中已下载了 第一目标文件,因此在下载差异目标文件后,即可直接得到所需下载的第二 目标文件。此后,如果在对单片机控制程序进行调试时,还需要进一步修改第二源 程序,则将该第二源程序作为以上所述的第一源程序,将修改第二源程序得 到的新的源程序作为第二源程序,执行以上所述的方法,从而将修改第二源 程序得到的新源程序所对应的目标文件下载到调试装置中,再继续对单片机 控制程序进行调试。如此重复,直到调试完成,得到符合开发目标的单片机 控制程序。实际应用中,由于各种单片机的存储器配置不同,因此本发明较佳实施 例所提供的方法在生成差异链表节点时,进一步将该差异链表节点的起始地 址与预先存储的单片机存储器范围进行比较,如果超出该范围,则表明产生了非法地址的数据,将该差异链表节点删除。举例来说,单片机RAM存储 器的地址中,有部分是不需要下载数据的地址,例如I/0口的地址范围,因此将单片机的配置信息加载到比较程序的结构体中,在进行目标文件之间的 差异比较过程中,将差异链表节点的地址与这部分不需要下载内容的地址进 行比较,如果处于该地址范围内(即产生了非法地址的数据),则不需要下 载,否则需要下载。图6为本发明较佳实施例中下载目标文件的系统结构图,如图6所示, 该系统包括程序修改单元601、目标文件生成单元602、下载单元603和比 较单元604。其中,目标文件生成单元602用于生成第一源程序对应的第一目标文 件;生成程序修改单元601修改得到的第二源程序对应的第二目标文件。程 序#"改单元601用于对第一源程序进行修改。比较单元604用于将目标文件 生成单元602生成的第一 目标文件和第二目标文件进行比较,生成第二目标 文件与第 一 目标文件之间的差异目标文件。下载单元603用于向调试装置下 载第一源程序对应的第一目标文件及比较单元604生成的差异目标文件。具体来说,比较单元604包括第 一数据合并4连接单元6041 ,用于将目标 文件生成单元602的第一目标文件转换为一个以上第一链表节点,将一个以上 第一链表节点链接为第一链表;第二数据合并链接单元6042,用于将目标文件 生成单元602的第二目标文件转换为一个以上第二链表节点,将一个以上第二 链表节点链接为第二链表;差异比较单元6043,用于将第一数据合并链接单元 6041的第一链表中的第一链表节点与第二数据合并链接单元6042的第二链表 中的第二链表节点进行比较,得到差异链表文件;以及差异链表文件转换单元 6044,用于将差异比较单元6043的差异链表文件转换为第二目标文件与第 一 目 标文件之间的差异目标文件。比较单元604中各单元执行的流程已以上文描述过,在此不再赘述。目标文件生成单元602包括编译单元6021和链接单元6022,其中编译 单元6021用于对源程序进行编-斧,生成机器代码文件;链接单元6022用于对 编译单元6021生成的机器代码文件进行库的链接,生成可执行机器代码,即目标文件。由以上所述可以看出,本发明所提供的技术方案,在将第一源程序对应 的第 一 目标文件下载到调试装置,并修改了第 一 源程序得到第二源程序之 后,将第二源程序生成的第二目标文件与第 一源程序生成的第 一 目标文件进行比较,得到第二目标文件与第一目标文件之间的差异目标文件,并将差异 目标文件下载到调试装置。从而,充分利用了 PC机的处理能力及速度优势, 将大量复杂的比较工作放到PC端,通过只下载第二目标文件与第 一 目标文 件之间的差异,减小了对单片机调试过程中,所需重复下载的数据量,加快 了源程序对应的目标文件的下载速度,从而减少了下载时间,提高了单片机 控制程序的开发效率,避免了全部下载第二目标丈件所造成的下载数据量 大、下载时间长、从而降低单片机控制程序开发效率的问题。同时,本发明较佳实施例中,将地址连续的数据合并为一个数据块,形 成链表节点,从而将目标文件转换为一个以上的链表节点,然后以链表节点 为单位进行比较处理,从而提高了比较速度和效率,进一步提高了单片机程 序的开发效率。进一步地,本发明较佳实施例中,将多个链表节点按照起始地址的顺序 重新排列,从而提高了对链表节点进行比较的效率,进一步提高了单片机程 序的开发效率。为了更加清楚本发明的优势所在,下面将采用本发明的下载方法与采用 现有技术下载修改后的源程序的效果进行比较。测试环境为u,nSP IDE 2.5.2的改进版,并分别采用printer probe和usb probe两种方式进行测试。表1为测-逸结果。下载方式下载资源采用现有技术的下载 速度采用本发明的下载速度目标存储器Printer Probe1.25MB14.9KB/s (耗时84秒)不到一秒,速度没有变, 但下载内容减少了SRAMPrinter ProbeL25MB13.3KB/s (耗时94秒)诔€时26秒FlashUSB Probe1.87MB37,4KB/s (耗时50秒)不到一秒SRAMUSB Probe1.87MB10.4KB/s(耗时180秒)9.12KB/s (耗时205秒)Flash表1测试结果由表1的第一行至第三行可以看出,相对于现有技术,采用本发明提供 的技术方案之后,下载同样大小的目标文件所需的下载时间得到了大幅度减 少,可见本发明提供的技术方案能够最大限度的提高速度,其主要原因就是 需要下载的差异部分很少。由表l的第四行可以看出,使用本发明的下载方式之后,下载所需的时间反而比采用现有技术的方式更多,原因是如果下载到Flash的内容有变化, 则整颗Flash的内容需要整片擦除,因此需要全部下载修改源程序后得到的 目标文件,同时还要进行比较目标文件之间的差异的工作,最终导致所花的 时间比现有技术还要长。但如杲Flash支持页擦除模式,则只需要额外增加 一个页边界的限制条件,就可以下载存在差异的Flash页面,从而减小了下 载目标文件的时间,提高了单片机程序的开发效率。目标文件全部加载到緩存中,然后以目标文件的行或字节为单位,对第二目 标文件与第一目标文件进行比较,得到内容不同的行或字节的地址,生成第 二目标文件与第一目标文件之间的差异目标文件,并下载到调试装置。在对 第 一源程序的修改比较小的情况下,例如只修改了第 一源程序中 一行的内容 时,这种方法可以达到显著地减小下载内容,从而提高单片机程序开发效率 的目的,但是在对第一源程序的修改比较大时,这种方法会占用计算机的处 理能力,因此,其加快下载速度的效果不如以上本发明的较佳实施例所达到 的效果。以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范 围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等, 均应包含在本发明的保护范围之内。
权利要求
1. 一种下载目标文件的方法,将由第一源程序生成的第一目标文件下载到调试装置,修改所述第一源程序,得到第二源程序,生成所述第二源程序对应的第二目标文件,其特征在于,该方法还包括将所述第一目标文件与所述第二目标文件进行比较,生成所述第二目标文件与所述第一目标文件之间的差异目标文件;向所述调试装置下载所述差异目标文件。
2、 如权利要求l所述的方法,其特征在于,所述将第一目标文件与第二目 标文件进行比较之前,该方法进一步包括将所述第一目标文件和所述第二目 标文件分別转换为一个以上第一链表节点和一个以上第二链表节点;分别链接 所述一个以上第一链表节点和所述一个以上第二链表节点生成第一链表和第二 链表;所述将第一目标文件与第二目标文件进行比较包括将所述第一链表中的 第 一链表节点与所述第二链表中的第二链表节点依次进行比较。
3、 如权利要求2所述的方法,其特征在于,所述第一目标文件和第二目标 文件中的每一行包括数据及其对应的起始地址和数据长度;所述将第一 目标文件和第二目标文件分别转换为一个以上第一链表节点和 一个以上第二链表节点包括将所述第一目标文件和所述第二目标文件分别加载到第一緩存单元和第二 緩存单元;扫描所述第一緩存单元和所述第二緩存单元,分别将所述第一目标文件与 第二目标文件中起始地址连续的数据合并为数据块,得到第一目标文件对应的 一个以上数据块,及第二目标文件对应的一个以上数据块;将合并生成的 一个以上数据块增加对应的起始地址和数据块长度,生成一 个以上第 一链表节点和一个以上第二链表节点。
4、 如权利要求3所述的方法,其特征在于,所迷分别链接一个以上第一链表节点和一个以上第二链表节点生成第 一链表和第二链表包括根据所述第一链表节点和第二链表节点中的起始地址,分别对所述第一链 表节点和第二链表节点进行排序并用链表形式链接起来,得到第 一链表和第二链表。
5、 如权利要求4所述的方法,其特征在于,所述将第一链表中的第一链表 节点与第二链表中的第二链表节点依次进行比较,生成所述第二目标文件与所 述第 一 目标文件之间的差异目标文件包括如果所述第二链表节点的起始地址大于或等于所述第一链表节点的起始地 址与所述第一链表节点的数据块长度之和,则直接将所述第二链表节点与下一 个第一链表节点进行比较;如果所述第二链表节点的起始地址与数据块长度之和小于或等于所述第一 链表节点的起始地址,则将所述第二链表节点记录为差异链表节点,并将下一 个第二链表节点与所述第 一链表节点进行比较;如果所述第二链表节点的起始地址及数据块长度与所述第一链表节点的起 始地址与数据块长度分别相等,则将所述第二链表节点与所述第一链表节点之 间的差异记录为差异链表节点;将比较得到的差异链表节点转换为差异目标文件。
6、 如权利要求5所述的方法,其特征在于,所述将比较得到的差异链表节 点转换为差异目标文件之前,该方法进一步包括如果所述第二链表节点的起始地址大于所述第 一链表节点的起始地址,且 所述第二链表节点的起始地址与数据块长度之和小于所述第一链表节点的起始 地址与数据块长度之和,则将所述第 一链表节点划分为起始地址为所述第一链表节点的起始地址,数据块长度为所述第二链表节 点的起始地址与所述第 一链表节点的起始地址之差的第 一子链表节点,起始地址为所述第二链表节点的起始地址,数据块长度为所述第二链表节 点的数据块长度的第二子链表节点,及起始地址为所述第二链表节点的起始地址与数据块长度之和,数据块长度为所述第一链表节点的数据块长度与所述第一子链表节点及第二子链表节点的数据块长度之差的第三子链表节点;将所述第二链表节点与所述第二子链表节点之间的差异记录为差异链表节 点,并继续下一个第二链表节点与所述第三子链表节点的比较。
7、 如权利要求5所述的方法,其特征在于,所述将比较得到的差异链表节 点转换为差异目标文件之前,该方法进一步包括如果所述第二链表节点的起始地址小于所述第一链表节点的起始地址,且 所述第二链表节点的起始地址与数据块长度之和大于所述第 一链表节点的起始 地址与数据块长度之和,则将所述第二链表节点划分为起始地址为所述第二链表节点的起始地址,数据块长度为所述第一链表节 点的起始地址与所述第二链表节点的起始地址之差的第 一子链表节点,起始地址为所述第一链表节点的起始地址,数据块长度为所s述第一链表 节点的数据块长度的第二子链表节点,及起始地址为所述第一链表节点的起始地址与数据块长度之和,数据块长度 为所述第二链表节点的数据块长度与所述第 一子链表节点及第二子链表节点的 数据块长度之差的第三子链表节点;将所述第一子链表节点记录为差异链表节点;将所述第一链表节点与所述 第二子链表节点之间的差异记录为差异链表节点,并继续所述第三子链表节点 与下一个第 一链表节点的比较。
8、 如权利要求5所述的方法,其特征在于,所述将比较得到的差异链表节 点转换为差异目标文件之前,该方法进一步包括如果所述第二链表节点的起始地址大于所述第一链表节点的起始地址,且 所述第二链表节点的起始地址与数据块长度之和大于或等于所述第一链表节点 的起始地址与数据块长度之和,则将所述第 一链表节点划分为起始地址为所述第一链表节点的起始地址,数据块长度为所述第二链表节 点的起始地址与所述第 一链表节点的起始地址之差的第 一子链表节点,及起始地址为所述第二链表节点的起始地址,数据块长度为所述第 一链表节点的数据块长度与所述第 一子链表节点的数据块长度之差的第二子链表节点; 将所述第二链表节点划分为起始地址为所述第二链表节点的起始地址,数据块长度为所述第二子链表 节点的数据块长度的第三子链表节点,及起始地址为所述第二链表节点的起始地址与所述第三子链表节点的数据块 长度之和,数据块长度为所述第二链表节点的数据块长度与所述第三子链表节 点的数据块长度之差的第四子链表节点;将所述第三子链表节点与所述第二子链表节点之间的差异记录为差异链表 节点;并继续所述第四子链表节点与下一个第 一链表节点的比较。
9、如权利要求5所述的方法,其特征在于,所述将比專交得到的差异链表节 点转换为差异目标文件之前,该方法进一步包括如果所述第二链表节点的起始地址小于所述第一链表节点的起始地址,且 所述第二链表节点的起始地址与数据块长度之和小于或等于所述第一链表节点 的起始地址与数据块长度之和,则将所述第二链表节点划分为起始地址为所述第二链表节点的起始地址,数据块长度为所述第一链表节 点的起始地址与所述第二链表节点的起始地址之差的第 一子链表节点,及起始地址为所述第 一链表节点的起始地址,数据块长度为所述第二链表节 点的数据块长度与所述第 一子链表节点的数据块长度之差的第二子链表节点;将所述第 一链表节点划分为起始地址为所述第 一链表节点的起始地址,数据块长度为所述第二子链表 节点的数据块长度的第三子链表节点,及起始地址为所述第一链表节点的起始地址与所述第三子链表节点的数据块 长度之和,数据块长度为所述第一链表节点的数据块长度与所述第三子链表节 点的数据块长度之差的第四子链表节点;将所述第一子链表节点记录为差异链表节点;将所述第二子链表节点与所述第三子链表节点之间的差异记录为差异链表节点;并继续下一个第二链表节 点与所述第四子链表节点的比较。
10、 如权利要求5所述的方法,其特征在于,所述将第二链表节点与第一 链表节点之间的差异记录为差异链表节点包括比较所述第二链表节点与所述第 一链表节点中的数据块的对应字节;如果所述对应字节的内容不同,则生成所述第二链表节点中对应字节的内容的差异链表节点,或将所述第二链表节点中对应字节的内容的接续到已生成的差异链表节点中。
11、 如权利要求5所述的方法,其特征在于,所述将比较得到的差异链表 节点转换为差异目标文件之前,该方法进一步包括将比较得到的差异链表节点的起始地址与预先存储的单片机存储器的范围 进行比较,如果超出该范围,则删除该差异链表节点。
12、 一种下栽目标文件的系统,其特征在于,该系统包括程序修改单元、 目标文件生成单元、比较单元、差异目标文件生成单元和下载单元,所迷目标文件生成单元,用于生成第一源程序对应的第一目标文件;生成 所述程序修改单元修改得到的第二源程序对应的第二目标文件;所述程序修改单元,用于对所述第一源程序进行修改;所述比较单元,用于将所述目标文件生成单元生成的第一目标文件和第二 目标文件进行比较,生成所述第二目标文件与所述第一目标文件之间的差异目 标文件;所述下载单元,用于向调试装置下载所述第一源程序对应的第一目标文件 及所述比4支单元生成的差异目标文件。
13、 如权利要求12所述的系统,其特征在于,所述比较单元包括 第一数据合并链接单元,用于将所述目标文件生成单元的第一 目标文件转换为 一个以上第 一链表节点,将所述一个以上第 一链表节点链接为第 一链表;第二数据合并链接单元,用于将所述目标文件生成单元的第二目标文件转 换为一个以上第二链表节点,将所述一个以上第二链表节点链接为第二链表;差异比较单元,用于将所述第 一数据合并链接单元的第 一链表中的第 一链 表节点与所述第二数据合并链接单元的第二链表中的第二链表节点进行比较,得到差异链表文件;以及差异链表文件转换单元,用于将所述差异比较单元的差异链表文件转 换为所述第二目标文件与所述第一目标文件之间的差异目标文件。
全文摘要
本发明公开了一种下载目标文件的方法,包括将由第一源程序生成的第一目标文件下载到调试装置,修改所述第一源程序,得到第二源程序,生成所述第二源程序对应的第二目标文件;将所述第一目标文件与所述第二目标文件进行比较,生成所述第二目标文件与所述第一目标文件之间的差异目标文件;向所述调试装置下载所述差异目标文件。本发明提供的技术方案通过只下载第二目标文件与第一目标文件之间的差异,减小了单片机调试过程中,需要重复下载的数据量,加快了源程序对应的目标文件的下载速度,从而减少了下载时间,提高了单片机控制程序的开发效率。
文档编号G06F9/445GK101256499SQ200810087560
公开日2008年9月3日 申请日期2008年4月2日 优先权日2008年4月2日
发明者成元庆, 潘自诚 申请人:凌阳科技股份有限公司;北京北阳电子技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1