利用tcm实现代码、数据替换的方法

文档序号:6505777阅读:461来源:国知局
利用tcm实现代码、数据替换的方法
【专利摘要】本发明实施例公开了一种利用TCM实现代码替换的方法,包括:将第一代码加载到指令紧密耦合内存ITCM中;将所述ITCM的地址配置为第一代码地址;其中,所述第一代码地址是被所述第一代码对应的第一新代码段所替换的第一旧代码段的调用地址。本发明实施例还公开了一种利用TCM实现数据替换的方法,包括:将第一数据加载到数据紧密耦合内存DTCM中;将所述DTCM的地址配置为第一数据地址;本发明的代码、数据替换方法可以在不修改执行软件二进制编码的情况下实现代码、数据的替换,能有效的降低代码、数据替换时出现错误的概率。
【专利说明】利用TCM实现代码、数据替换的方法

【技术领域】
[0001]本发明涉及到嵌入式系统的代码、数据替换方法,特别涉及到一种利用嵌入式系统处理器的紧密耦合内存(Tightly Coupled Memory,简称,TCM)实现代码、数据替换的方法。

【背景技术】
[0002]随着嵌入式系统的发展,嵌入式系统的软件功能越来越复杂,软件代码也越来越庞大,为了降低软件修改的成本开销,嵌入式系统的软件和数据通常都会采用模块化的设计方式,通过程序模块中调用其他程序模块和数据模块的方式来实现各种功能。
[0003]嵌入式系统中运行的执行文件一般分两个步骤得到:将源文件编译成目标文件和/或库文件;将目标文件和/或库文件进行链接得到可执行文件。执行文件实际是由一条一条CPU能够识别的机器码以及被初始化过的数据等组成。
[0004]在嵌入式系统的软件功能更新或修改时,有时会需要将部分代码和/或数据用新的代码和/或数据替换。
[0005]现有技术处理软件的代码、数据替换时,通常采用的方法有两种:
[0006]方法一是修改软件源代码,在软件源代码中修改需要替换的代码和/或数据,然后重新编译、链接整个软件获得新的可执行文件。
[0007]这种方法的主要缺点是,必须对相关程序的源代码进行修改,而嵌入式系统软件中经常会用到第三方以非源代码方式提供的程序(第三方提供的程序代码通常是目标文件或库文件等形式),如果需要替换的代码和/或数据要被第三方以非源代码方式提供的程序调用;因为没有对应的源代码,就无法采用这种方法来实现代码、数据的替换。
[0008]方法二是首先将新的代码段和/或数据添加到执行文件中(可以将新代码和/或数据编译成目标文件或库文件,与原执行文件的目标文件或库文件进行链接;也可以直接将新代码和/或数据的二进制编码添加到执行文件二进制编码中。),并在软件加载时将其加载到RAM运行空间;修改嵌入式软件执行文件中需要调用被替换的代码段和/或数据之处的机器码,将其修改为调用新代码段和/或新数据。
[0009]方法二虽然能够解决方法一的缺点,但是修改执行文件的机器码(二进制编码)极易造成执行文件的不稳定,特别是执行文件中被替换的代码段和/或数据段被调用之处较多时,软件机器码修改的工作量很大且容易出现修改遗漏或错误。


【发明内容】

[0010]有鉴于此,本发明提出了一种利用TCM实现代码、数据替换的方法,以解决现有技术中存在的问题。
[0011]在一些处理器(例如,ARM)中设计有内置的TCM。由于TCM在处理器内部且存取速度与Cache相当,所以它主要用于存放一些经常使用的代码或数据,减少CPU通过数据总线访问外部存储设备的次数与耗时。TCM分两类:用于存放代码的指令紧密耦合内存(Instruct1n Tightly-Coupled Memory,简称,ITCM);用于存放数据的数据紧密稱合内存(Data Tightly-Coupled Memory,简称,DTCM),每个TCM的物理地址空间在软件流程中可以动态配置,并可以动态使能或禁用。
[0012]TCM作为一种可动态配置物理地址的特殊内存,有一特性:当TCM配置的物理地址与其他地址重合时,处理器访问该地址时只能访问TCM,而不能访问该地址所对应的其他存储空间。
[0013]本发明的技术方案包括利用TCM实现代码替换的方法和利用TCM实现数据替换的方法。
[0014]一种利用TCM实现代码替换的方法,包括:
[0015]使能ITCM ;
[0016]将第一代码加载到ITCM中;
[0017]将所述ITCM的地址配置为第一代码地址;
[0018]其中,所述第一代码地址是被所述第一代码对应的第一新代码段所替换的第一旧代码段的调用地址。
[0019]可选的,所述方法的各步骤在引导程序中执行。
[0020]进一步的,所述方法还可以包括,预先将所述第一代码添加到所述引导程序中。
[0021]可选的,所述方法的各步骤由操作系统任务调度程序调用代码替换任务执行。
[0022]可选的,所述方法还包括:
[0023]在所述第一新代码段的最后执行:
[0024]将第二代码加载到所述ITCM中;
[0025]将所述ITCM的地址配置为第二代码地址;
[0026]其中,所述第二代码地址是被所述第二代码对应的第二新代码段所替换的第二旧代码段的调用地址。
[0027]可选的,所述第二代码是代码调用程序,用于从所述第二新代码段的调用地址调用所述第二新代码段。
[0028]可选的,所述第一代码是代码调用程序,用于从所述第一新代码段的调用地址调用所述第一新代码段。
[0029]一种利用TCM实现数据替换的方法,包括:
[0030]使能DTCM;
[0031]将第一数据加载到DTCM中;
[0032]将所述DTCM的地址配置为第一数据地址;
[0033]其中,所述第一数据地址是被所述第一数据所替换的第一旧数据段的调用地址。
[0034]可选的,所述方法的各步骤在引导程序中执行。
[0035]进一步的,所述方法还包括:预先将所述第一数据添加到所述引导程序中。
[0036]可选的,所述方法的各步骤由操作系统任务调度程序调用数据替换任务执行。
[0037]可选的,所述调用地址是虚拟地址或物理地址。
[0038]本发明的方法利用处理器的ITCM来加载新代码段,将ITCM的地址配置为所述新代码段将要替换的旧代码段的调用地址,这样,无需修改调用该新代码段的程序的二进制编码,即可实现代码替换。同时,利用处理器的DTCM来加载新数据段,将DTCM的地址配置为所述新数据段将要替换的旧数据段的调用地址,这样,无需修改调用该新数据段的程序的二进制编码,即可实现数据替换。可以避免修改软件二进制编码造成的执行文件不稳定以及容易遗漏及出错的问题,同时也提高了软件修改时实现代码、数据替换的效率。

【专利附图】

【附图说明】
[0039]图1是现有技术实现代码、数据替换的方法二的流程图
[0040]图2是本发明具体实施例1的流程图;
[0041]图3是本发明具体实施例2的流程图;
[0042]图4是本发明具体实施例3代码替换方法流程图;
[0043]图5是本发明具体实施例3数据替换方法流程图;

【具体实施方式】
[0044]为进一步说明本发明的技术方案,下面通过具体实施例结合附图详细说明。
[0045]具体实施例1
[0046]本具体实施例为本发明利用TCM实现代码替换的一种优选实施方式,本实施例代码替换流程如图2所示。
[0047]本实施例中,首先需要执行步骤100,修改执行文件:
[0048]100、将第一新代码段添加到执行文件中;
[0049]具体的添加方法可以是【背景技术】中所述的方法或任意一种现有技术的添加方法;本实施例对此没有限制。
[0050]101、使能 ITCM ;
[0051]102、将第一代码加载到所述ITCM中;
[0052]103、配置所述ITCM的地址为第一代码地址。
[0053]嵌入式系统的软件通常可以分为引导程序、操作系统和各功能程序,嵌入式系统上电开机后,处理器首先会加载运行引导程序,进行系统初始化,系统初始化完成后,引导程序会加载操作系统的任务调度程序,然后跳转到操作系统任务调度程序运行。任务调度程序根据系统运行的需要调度各功能程序运行以完成各项功能。
[0054]本实施例中,代码替换流程可以在引导程序中执行:
[0055]引导程序在加载操作系统的任务调度程序后,执行所述代码替换流程的步骤101?103 ;然后跳转到操作系统任务调度程序运行。
[0056]可选的,所述第一代码可以是预先添加到所述引导程序的镜像文件中,由所述引导程序直接将所述第一代码搬移到所述ITCM中;
[0057]可选的,所述第一代码也可以是独立保存在嵌入式系统的存储器中,由所述引导程序将所述第一代码从存储器中加载到所述ITCM中。
[0058]本实施例中,代码替换流程也可以通过操作系统任务调度的方式执行:
[0059]在嵌入式系统软件中增加一个包括所述步骤101?103的代码替换任务程序,由操作系统任务调度程序调用该任务执行所述代码替换流程。
[0060]需要说明的是,上述仅仅是对代码段替换流程步骤执行方式的举例说明,本发明对于代码段替换流程步骤的具体执行方式并没有限制。如,本实施例中还可以通过在第一任务中执行所述步骤101?103 ;所述第一任务为在调用所述第一代码的任务之前执行的且源代码可以修改的任务程序。
[0061]可选的,所述第一代码可以是用于替换第一旧代码段的新代码段;
[0062]可选的,所述第一代码还可以是代码调用程序,执行所述第一代码可以调用第一新代码段。采用本优选实现方案可以减少代码替换所需的ITCM空间,可以利用较小的ITCM空间实现体积较大的新代码段的替换。
[0063]所述第一代码地址为被所述第一代码对应的第一新代码段所替换的第一旧代码段的调用地址;
[0064]所述调用地址可以是虚拟地址也可以是物理地址。
[0065]本实施例中,所述调用地址是指被调用代码的存储地址或运行地址。
[0066]具体实施例2
[0067]本具体实施例为本发明利用TCM实现数据替换的一种优选实施方式,本实施例总体流程如图3所示。
[0068]本实施例中,首先首先需要执行步骤200,修改执行文件:
[0069]200、将第一新数据段添加到执行文件中;
[0070]具体的添加方法可以是【背景技术】中所述的方法或任意一种现有技术的添加方法;本实施例对此没有限制。
[0071]201、使能01^11。
[0072]202、将第一数据加载到所述DTCM中;
[0073]203、配置所述DTCM的地址为第一数据地址;
[0074]嵌入式系统的软件通常可以分为引导程序、操作系统和各功能程序,嵌入式系统上电开机后,处理器首先会加载运行引导程序,进行系统初始化,系统初始化完成后,引导程序会加载操作系统的任务调度程序,然后跳转到操作系统任务调度程序运行。任务调度程序根据系统运行的需要调度各功能程序运行。
[0075]本实施例中,数据段替换流程可以在引导程序中执行:
[0076]引导程序在加载操作系统的任务调度程序后,执行所述数据替换流程的步骤201?203 ;然后跳转到操作系统任务调度程序运行。
[0077]可选的,所述第一数据可以是预先添加到所述引导程序的镜像文件中,由所述引导程序直接将所述第一数据搬移到所述DTCM中;
[0078]可选的,所述第一数据也可以是独立保存在嵌入式系统的存储器中,由所述引导程序将所述第一数据从存储器中加载到所述DTCM中。
[0079]本实施例中,数据段替换流程也可以通过操作系统任务调度的方式执行:
[0080]在嵌入式系统软件中增加一个包括所述步骤201?203的数据替换任务程序,由操作系统任务调度程序调用该任务执行所述数据替换流程。
[0081]需要说明的是,上述仅仅是对数据段替换流程步骤执行方式的举例说明,本发明对于数据段替换流程步骤的具体执行方式并没有限制。如,本实施例中还可以通过在第一任务中执行所述步骤201?203 ;所述第一任务为在调用所述第一数据的任务之前执行的且源代码可以修改的任务程序。
[0082]所述第一数据可以是用于替换旧数据段的新数据段;
[0083]所述第一数据地址为被所述第一数据所替换的第一旧数据段的调用地址;
[0084]所述调用地址可以是虚拟地址也可以是物理地址。
[0085]本实施例中,所述调用地址是指被调用数据的存储地址。
[0086]具体实施例3
[0087]下面,以一个在嵌入式系统中具体的代码、数据替换流程来进一步说明本发明的方法。
[0088]嵌入式系统的处理器内置有一个ITCM和一个DTCM。嵌入式软件系统包括有操作系统任务调度程序Service Management和多个功能程序Service (i);其中,功能程序Service (2)为第三方提供,无法对程序进行直接修改。
[0089]Service (2)在执行过程中会调用代码段Codel、Code2 ;其中,Codel的调用地址为address_Cl, Code2 的调用地址为 address_C2, Codel 在 Code2 之前被调用。
[0090]Service (2)在执行过程中还会调用数据段Datal、Data2 ;其中,Datal的调用地址为address_Dl, Data2的调用地址为address_D2, Datal在Data2之前被调用。
[0091]本实施例中,需要将Codel替换为Codel_new代码段,将Code2替换为Code2_new代码段,将Datal替换为Datal_new数据段,将Data2替换为Data2_new数据段。
[0092]本实施例实现所述代码替换的流程如图4所示,包括:
[0093]300、预先将所述Codel_new、Code2_new添加到执行文件中,并建立一个代码替换任务 Service_codereplace;
[0094]301、使能所述 ITCM ;
[0095]302>Service Management 调度 Service_codereplace 执行,将 Codel_new 加载到ITCM 中;
[0096]本步骤中,所述加载具体操作可以是直接将Codel_new代码段加载到ITCM中;也可以是在ITCM中加载一个代码调用程序,执行该代码调用程序会调用所述Codelnew代码段。
[0097]303、Service_codereplace 将所述 ITCM 的地址配置为 address_Cl ;
[0098]需要说明的是,本领域技术人员显然清楚,上述步骤301?303应当在所述Service (2)中调用Codel的指令执行之前执行;当Service (2)执行调用Codel的指令时,实际上是调用了所述Codel_new;
[0099]304、Codel_new 执行完成后,将 Code2_new 加载到 ITCM 中;
[0100]305、将所述ITCM的地址配置为address_C2 ;
[0101]需要说明的是,本领域技术人员显然清楚,上述步骤304?305应当在所述Service (2)中调用Code2的指令执行之前执行;当Service (2)执行调用Code2的指令时,实际上是调用了所述Code2_new;
[0102]所述步骤304 和 305 可以由所述 Service Management 调度 Service_codereplace执行。
[0103]作为本实施例的一种优选实现方案,可以在所述Codel_new代码段的末尾增加指令来直接执行所述步骤304和305。
[0104]本优选实现方案可以减少Service Management的调度次数,减少代码、数据替换流程对Service (2)程序执行的影响。
[0105]本实施例的代码替换方法可以利用一个ITCM实现多个不同的代码段的替换,需要说明的是,上述仅为举例说明,并非对本发明的限定,例如,所述步骤301?303也可以在引导程序中执行或在第一任务中执行。所述第一任务为在调用所述第一代码的任务之前执行的且源代码可以修改的任务程序。虽然本实施例中描述的是2个代码段替换的流程,但本领域技术人员显然清楚,本实施例的方法同样也可以用于3个以上不同代码段的替换。
[0106]本实施例中,各代码段的调用地址是指被调用代码的存储地址或运行地址。
[0107]本实施例实现所述数据替换的流程如图5所示,包括:
[0108]310、预先将所述Datal_new、Data2_new添加到执行文件中,并建立一个数据替换任务 Service_datareplace;
[0109]311、使能 DTCM;
[0110]312、Service Management 调度 Service_datareplace 执行,将 Datal_new 加载到DTCM 中;
[0111]313、Service_datareplace 将所述 DTCM 的地址配置为 address_Dl ;
[0112]需要说明的是,本领域技术人员显然清楚,上述步骤311?313应当在所述Service (2)中调用Datal的指令执行之前执行;当Service (2)执行调用Datal的指令时,实际上是调用了所述Datal_new;
[0113]314、在 Service (2)完成对 Datal_new 的使用后,将 Data2_new 加载到 ITCM 中;
[0114]315、将所述DTCM的地址配置为address_D2 ;
[0115]需要说明的是,本领域技术人员显然清楚,上述步骤314?315应当在所述Service (2)中调用Data2的指令执行之前执行;当Service (2)执行调用Data2的指令时,实际上是调用了所述Data2_new;
[0116]所述步骤314 和 315 可以由 Service Management 调度 Service_datareplace 执行。
[0117]本实施例的数据替换方法可以利用一个DTCM实现多个不同的数据段的替换,需要说明的是,上述仅为举例说明,并非对本发明的限定,例如,所述步骤311?313也可以在引导程序中执行或在第一任务中执行。所述第一任务为在调用所述第一数据的任务之前执行的且源代码可以修改的任务程序。虽然本实施例中描述的是2个数据段的替换流程,但本领域技术人员显然清楚,本实施例的方法同样也可以用于3个以上不同数据段的替换。
[0118]本实施例中,各数据段的调用地址是指被调用数据的存储地址。
[0119]本领域的一般技术人员显然应该清楚并且理解,本发明所举的以上实施例仅用于说明本发明,而并不用于限制本发明。例如,本发明实施例中的代码替换方法和数据替换方法并不排斥,可以同时执行;代码替换任务和数据替换任务可以是同一个任务程序等。在不背离本发明的精神及其实质的情况下,本领域技术人员当可根据本发明做出各种相应的改变或变形,但这些相应的改变或变形均属于本发明的权利要求保护范围。
【权利要求】
1.一种利用紧密耦合内存TCM实现代码替换的方法,其特征在于,包括: 使能指令紧密耦合内存ITCM ; 将第一代码加载到ITCM中; 将所述ITCM的地址配置为第一代码地址; 其中,所述第一代码地址是被所述第一代码对应的第一新代码段所替换的第一旧代码段的调用地址。
2.根据权利要求1所述的方法,其特征在于: 所述方法的各步骤在引导程序中执行。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括: 预先将所述第一代码添加到所述引导程序中。
4.根据权利要求1所述的方法,其特征在于: 所述方法的各步骤由操作系统任务调度程序调用代码替换任务执行。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括: 在所述第一新代码段的最后执行: 将第二代码加载到所述ITCM中; 将所述ITCM的地址配置为第二代码地址; 其中,所述第二代码地址是被所述第二代码对应的第二新代码段所替换的第二旧代码段的调用地址。
6.根据权利要求5所述的方法,其特征在于: 所述第二代码是代码调用程序,用于从所述第二新代码段的调用地址调用所述第二新代码段。
7.根据权利要求1?6中任意一项所述的方法,其特征在于: 所述调用地址是虚拟地址或物理地址。
8.根据权利要求1?6任意一项所述的方法,其特征在于: 所述第一代码是代码调用程序,用于从所述第一新代码段的调用地址调用所述第一新代码段。
9.根据权利要求8所述的方法,其特征在于: 所述调用地址是虚拟地址或物理地址。
10.一种利用紧密耦合内存TCM实现数据替换的方法,其特征在于,包括: 使能数据紧密耦合内存DTCM ; 将第一数据加载到DTCM中; 将所述DTCM的地址配置为第一数据地址; 其中,所述第一数据地址是被所述第一数据所替换的第一旧数据段的调用地址。
11.根据权利要求10所述的方法,其特征在于: 所述方法的各步骤在引导程序中执行。
12.根据权利要求11所述的方法,其特征在于,所述方法还包括: 预先将所述第一数据添加到所述引导程序中。
13.根据权利要求10所述的方法,其特征在于: 所述方法的各步骤由操作系统任务调度程序调用数据替换任务执行。
14.根据权利要求10?13中任意一项所述的方法,其特征在于:所述调用地址是虚拟地址或物理地址。
【文档编号】G06F9/44GK104281443SQ201310293596
【公开日】2015年1月14日 申请日期:2013年7月12日 优先权日:2013年7月12日
【发明者】陈俊华 申请人:重庆重邮信科通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1