CN114637535A - 一种处理可执行代码的方法、装置、终端及可读存储介质 - Google Patents
一种处理可执行代码的方法、装置、终端及可读存储介质 Download PDFInfo
- Publication number
- CN114637535A CN114637535A CN202210323863.7A CN202210323863A CN114637535A CN 114637535 A CN114637535 A CN 114637535A CN 202210323863 A CN202210323863 A CN 202210323863A CN 114637535 A CN114637535 A CN 114637535A
- Authority
- CN
- China
- Prior art keywords
- instruction
- code
- processor
- memory
- chip
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30069—Instruction skipping instructions, e.g. SKIP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
- G06F9/327—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for interrupts
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本公开是关于一种处理可执行代码的方法、装置、终端及可读存储介质。所述方法包括:按照可执行代码的运行逻辑依次从设定类型处理器的片外内存中获取代码段;其中,所述片外内存中存储有所述可执行代码的多个代码段;将获取的代码段加载到所述终端的设定类型处理器的片内内存中的设定空间中;在所述设定空间中运行所述代码段。该方法不依赖于特定的支持XIP的闪存器件,同时也不依赖于特定的支持MMU、MPU的处理器,使用处理器较小的内存,就能将可执行代码的运行空间大幅扩充,并且不会占用处理器过多的PIN脚资源,有利于将复杂的应用场景实现储存空间小但处理速度快的处理器上,扩大处理器的应用场景,降低对应产品的成本。
Description
技术领域
本公开涉及嵌入式电子技术领域,尤其涉及一种处理可执行代码的方法、装置及可读存储介质。
背景技术
进阶精简指令集机器(Advanced RISC Machines,ARM)处理器广泛应用于嵌入式设备领域,ARM处理器产品分为经典ARM处理器系列(ARM7~ARM11)和ARM Cortex处理器系列。基于ARM Cortex处理器的片上系统解决方案适用于多种嵌入式设备细分市场,如物联网、电机控制、医疗、汽车、家电自动化等。Cortex系列处理器主要为三大产品类型量身开发,A系列:面向移动计算,智能手机,服务器等市场的高端处理器;R系列:面向实时应用的高性能处理器;M系列:面向低功耗、确定性、成本敏感的微控制器。Cortex-M系列处理器是一系列可向上兼容的高能效、易于使用的处理器,以更低的成本提供更多功能、不断增加连接、提高能效,相比于许多微控制器使用的传统处理器性能强大很多。
在计算机系统中,中央处理器(Central Processing Unit,CPU)需要先提取到机器指令,然后译码,最后才能执行机器指令。机器指令需要存储在CPU可直接寻址的存储器上,才能被CPU提取出来。CPU可直接寻址的存储器一般是片内随机存取存储器(RandomAccess Memory,RAM)、片外并行总线的RAM、或者并行总线的支持XIP(Executed In Place,片上执行)功能的闪存(Flash)。这样的存储器存储的单位存储空间价格都比较高,所以ARMCortex-M系列处理器上一般不会配置大容量的可供存储执行代码的存储器。这使得ARMCortex-M系列处理器上可提供的软件功能受到限制。
发明内容
为克服相关技术中存在的问题,本公开提供一种处理可执行代码的方法、装置及可读存储介质。
根据本公开实施例的第一方面,提供一种处理可执行代码的方法,应用于终端,所述方法包括:
按照可执行代码的运行逻辑依次从设定类型处理器的片外内存中获取代码段;其中,所述片外内存中存储有所述可执行代码的多个代码段;
将获取的代码段加载到所述终端的设定类型处理器的片内内存中的设定空间中;
在所述设定空间中运行所述代码段。
在一示例性的实施例中,所述片内内存中的设定空间的存储容量大于或等于任一代码段的信息容量。
在一示例性的实施例中,所述方法还包括:
在获取代码段后,对所述代码段进行编译,将所述代码段中的所述第一类指令替换为相应的SVC指令,将执行完替换的所述代码段加载到设定类型处理器的片内内存中的设定空间;
在运行至所述系统服务调用SVC指令的位置时,产生软中断,确定SVC指令对应的第一类指令,模拟执行所述第一类指令;
其中,所述第一类指令是与运行位置相关的指令。
在一示例性的实施例中,所述方法还包括:
确定所述第一类指令与所述SVC指令之间一一对应的映射关系。
在一示例性的实施例中,所述方法还包括:
在执行SVC指令之前或同时,确定所述SVC指令的执行是否会引发跨段跳转。
在一示例性的实施例中,所述模拟执行所述第一类指令,包括:
响应于确定所述SVC指令的执行会引发跨段跳转,并且,所述SVC指令对应于加载功能的第一类指令,将所述SVC指令对应的加载数据加载至相应的寄存器。
在一示例性的实施例中,所述模拟执行所述第一类指令,包括:
响应于确定所述SVC指令的执行会引发跨段跳转,并且,所述SVC指令对应于无返回跳转功能的第一类指令,确定跳转对应的目标代码所属的代码段,将所述目标代码所属的代码段加载至所述片内内存中的设定空间,将当前执行位置确定为所述设定空间内所述目标代码对应的位置。
在一示例性的实施例中,所述模拟执行所述第一类指令,包括:
响应于确定所述SVC指令的执行会引发跨段跳转,并且,所述SVC指令对应于需返回跳转功能的第一类指令,执行中转函数确定返回地址,在所述返回地址位于所述片内内存中的设定空间对应的地址范围之外时,确定所述返回地址对应的代码段,将所述返回地址对应的代码段加载至所述片内内存中的设定空间,将所述返回地址重定位于所述设定空间内的地址。
在一示例性的实施例中,所述方法还包括:
在与所述设定空间连续并且位于所述设定空间之后的内存中存储用于识别顺序跨段的SVC指令;
在执行所述用于识别顺序跨段的SVC指令时,确定所述设定空间内的代码段在所述片外闪存内的下一代码段,将所述下一代码段加载至所述设定空间,将当前执行位置确定为所述设定空间内第一个指令对应的位置。
根据本公开实施例的第二方面,提供一种处理可执行代码的装置,应用于终端,所述装置包括:
获取模块,被配置为按照可执行代码的运行逻辑依次从设定类型处理器的片外内存中获取代码段;其中,所述片外内存中存储有所述可执行代码的多个代码段;
加载模块,被配置为将获取的代码段加载到所述终端的设定类型处理器的片内内存中的设定空间中;
运行模块,被配置为在所述设定空间中运行所述代码段。
根据本公开实施例的第三方面,提供一种处理可执行代码的终端,其特征在于,所述终端包括设定类型处理器、片内内存和片外闪存:
设定类型处理器,被配置为按照可执行代码的运行逻辑依次从设定类型处理器的片外内存中获取代码段;其中,所述片外内存中存储有所述可执行代码的多个代码段;还被配置为将获取的代码段加载到所述终端的设定类型处理器的片内内存中的设定空间中;还被配置为在所述设定空间中运行所述代码段。
根据本公开实施例的第四方面,提供一种处理可执行代码的装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行如本公开实施例的第一方面中任一项所述的方法。
根据本公开实施例的第五方面,提供一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置的处理器执行时,使得装置能够执行如本公开实施例的第一方面中任一项所述的方法。
采用本公开的上述方法,具有以下有益效果:动态加载片外闪存中的可执行代码,片外闪存可以是任一SPI闪存,不依赖于特定的支持XIP的闪存器件,同时也不依赖于特定的支持MMU、MPU的处理器,使用处理器较小的内存,就能将可执行代码的运行空间大幅扩充,并且不会占用处理器过多的PIN脚资源,有利于将复杂的应用场景实现储存空间小但处理速度快的处理器上,扩大处理器的应用场景,降低对应产品的成本。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是根据一示例性的实施例示出的一种处理可执行代码的方法的流程图;
图2是根据一示例性的实施例示出的一种处理可执行代码的示意图;
图3是根据一示例性的实施例示出的一种处理可执行代码的具体流程图;
图4是根据一示例性的实施例示出的一种处理可执行代码的装置框图;
图5是根据一示例性的实施例示出的一种处理可执行代码的终端的示意图;
图6是根据一示例性的实施例示出的一种处理可执行代码的终端的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
在一些可能的实施方式中,在ARM Cortex-M系列处理器上存储可执行代码的几种方案具有以下缺点:
(1)存储在片内RAM上,单位存储空间价格高,片内RAM存储空间小;
(2)存储在片外并行总线的RAM上,单位存储空间价格高,存储空间小,并且外扩并行总线,会占用处理器的PIN脚(引脚)资源,使可用I/O(Input/Output,输入/输出)资源变少;
(3)存储在片外并行总线的支持XIP功能的Flash存储器(闪存)上,单位存储空间价格高,存储空间小,并且外扩并行总线,会占用处理器的PIN脚资源,使可用I/O资源变少;
(4)存储在片内SPI(Serial Peripheral Interface,串行外设接口)总线的支持XIP功能的Flash存储器上,在特定的支持SPI XIP Flash的处理器上可以用来存储执行代码,但受限于特定的Flash存储器和支持SPI XIP Flash的处理器器件。
在一些可能的实施方式中,ARM Cortex-M系列处理器,受可直接存储可执行代码的空间大小的限制,很难以较低成本存储大容量代码,难以被应用于复杂应用场景的设备中。这使得复杂应用场景的设备不得不使用芯片效能低的经典ARM处理器系列,或者Cortex-A系列、Cortex-R系列等高成本的处理器,进而影响到产品的性价。
本公开示例性的实施例中,提供一种处理可执行代码的方法,应用于终端,终端包括智能测量设备、家用电器、医疗器械等具有微控制器的设备。图1是根据一示例性的实施例示出的一种处理可执行代码的方法的流程图,如图1所示,所述方法包括步骤S101-S102:
步骤S101:按照可执行代码的运行逻辑依次从设定类型处理器的片外内存中获取代码段;其中,所述片外内存中存储有所述可执行代码的多个代码段;
步骤S102:将获取的代码段加载到所述终端的设定类型处理器的片内内存中的设定空间中;
步骤S103:在所述设定空间中运行所述代码段。
步骤S101中的多个代码段为按照预设大小将可执行代码分割获得的。每个代码段的信息容量可以相同,也可以部分代码段的信息容量与其它代码段的信息容量不同,信息容量为代码段所占的存储容量大小,例如比特总量。
在一示例中,可执行代码的大小为N,N=4KB,将其划分成N1、N2、…、Ni若干个代码段,依次存储于片外闪存中。
设定类型处理器为不支持内存管理单元(Memory Management Unit,MMU)的处理器,或者不支持内存保护单元(Memory Protection Unit,MPU)的处理器,或者既不支持MMU也不支持MPU的处理器,同时设定类型处理器的存储空间小但具有高能效的特点,例如ARMCortex-M系列处理器。
片外闪存为任一SPI闪存,无需具有XIP功能。
步骤S102中,片内内存为片内RAM,片内内存的设定空间可以根据该处理器可运行可执行代码的存储空间设定,设定空间为存储并运行代码段的空间。
图2是根据一示例性的实施例示出的一种处理可执行代码的示意图。在设定类型处理器的片内内存上,划分一个设定空间,按照可执行代码的运行逻辑依次,将存储于片外闪存上的多个代码段中的相应代码段加载到该设定空间中,并在设定空间中运行该代码段。
为了保证片内内存的存储空间利用率,在一些可能的实施方式中,所述片内内存中的设定空间的存储容量大于或等于任一代码段的信息容量。
在设定空间内运行代码段时,触发到预设指令时,预设指令包括顺序跨段、跳转跨段等,将设定空间中存储的该代码段的指令和数据卸载,并重新从片外闪存中加载一个代码段,该过程为段重载。
由于本方法将片外闪存的中的部分代码段加载至片内内存中设定空间的方式,所以每次进行代码段加载时都会加载到一个固定的地址上运行,则相应代码的运行地址会和编译地址不一致,则需要实现段中的代码在运行时的位置无关。鉴于大部分的ARM指令均与位置无关,将与位置相关的ARM指令称为第一类指令。在编译阶段使用系统服务调用(supervisor calls,SVC指令)替换第一类指令,从而实现位置无关。例如:
在一些可能的实施方式中,所述方法还包括:在获取代码段后,对所述代码段进行编译,将所述代码段中的所述第一类指令替换为相应的SVC指令,将执行完替换的所述代码段加载到设定类型处理器的片内内存中的设定空间;
在运行至所述SVC指令的位置时,产生软中断,确定SVC指令对应的第一类指令,模拟执行所述第一类指令;
其中,所述第一类指令是与运行位置相关的指令。
在将可执行代码存储到设定类型处理器的片外闪存之前,已经完成了对其进行的预处理。预处理包括编译可执行代码,将编译后的可执行代码中的第一类指令替换为相应的SVC指令。将执行完替换的相应代码段加载到设定类型处理器的片内内存中的设定空间,以在运行代码段时识别SVC指令进行中断处理。
第一类指令是与位置相关的指令,包括加载指令、跳转指令,加载指令包括LDR、LDM相关的指令,跳转指令包括B、BX指令和BL、BLX指令。对可执行代码进行编译后,通过对可执行代码编译生成的二进制镜像文件进行提取、解析获取第一类指令,并将其替换为SVC指令。SVC指令是一种中断指令,能够在可执行代码运行过程中产生函数的调用请求,其设定方式简单,一般设定为SVC#0的形式,在运行到SVC指令的位置时,产生软中断,确定SVC指令对应的第一类指令,模拟执行第一类指令。
在一些可能的实施方式中,所述方法还包括:
确定所述第一类指令与所述SVC指令之间一一对应的映射关系。
根据可执行代码中第一类指令的机器码格式,对第一类指令进行详细划分,划分为不同的类型,同一类型的第一类指令对应设置一个SVC服务调用号。根据第一类指令与SVC指令之间的映射关系进行替换,并将映射关系表存储到片外闪存中。同时将被替换的第一类指令的机器码和位置保存到一张表格中存储到片外闪存中,方便后续查找使用。
在一些可能的实施方式中,所述方法还包括:
在执行SVC指令之前或同时,确定所述SVC指令的执行是否会引发跨段跳转。
跨段跳转表示在当前代码段运行过程中,需要跳转到其他代码段继续运行,跨段跳转包括加载跨段、跳转跨段、顺序跨段和返回跨段,能够触发跨段跳转的第一类指令包括加载指令和跳转指令。在执行SVC指令之前或同时,确定SVC指令的执行是否会引发跨段跳转,能够保证可执行代码的运行过程不中断,同时确定是否需要进行段重载。
在一些可能的实施方式中,所述模拟执行所述第一类指令,包括:
响应于确定所述SVC指令的执行会引发跨段跳转,并且,所述SVC指令对应于加载功能的第一类指令,将所述SVC指令对应的加载数据加载至相应的寄存器。
当SVC指令的执行会引发跨段跳转,并且,SVC指令对应于加载功能的第一类指令时,不需要进行段重载。模拟执行第一类指令时,根据第一类指令与SVC指令的映射关系,解析出机器码,计算出需要加载数据的源地址和相应的寄存器,即目的寄存器,从片外闪存中读出源地址的数据将其加载到相应的寄存器中,即完成了加载功能的第一类指令的模拟执行。
在一些可能的实施方式中,所述模拟执行所述第一类指令,包括:
响应于确定所述SVC指令的执行会引发跨段跳转,并且,所述SVC指令对应于无返回跳转功能的第一类指令,确定跳转对应的目标代码所属的代码段,将所述目标代码所属的代码段加载至所述片内内存中的设定空间,将当前执行位置确定为所述设定空间内所述目标代码对应的位置。
当SVC指令的执行会引发跨段跳转,并且,SVC指令对应于无返回跳转功能的第一类指令时,先确定是否需要进行段重载。模拟执行第一类指令时,根据第一类指令与SVC指令的映射关系,解析机器码,计算出需要跳转到的目的地址,从而确定跳转对应的目标代码。
根据目标代码所属的代码段,确定是否需要进行段重载,无返回跳转功能的第一类指令的模拟执行过程有以下两种情况:
第一种:当目标代码所属的代码段是当前片内内存中设定空间的代码段时,不需要进行段重载。将无返回跳转功能的第一类指令的目的地址重定位为片内内存中设定空间上的地址,将重定位后的设定空间内的地址赋值给PC寄存器(Program Counter Register,程序计数器),使其跳转到重定位后的设定空间内的地址,即完成了无返回跳转功能的第一类指令的模拟执行。
第二种:当目标代码所属的代码段不是当前片内内存中设定空间的代码段时,需要进行段重载。计算无返回跳转功能的第一类指令的目的地址所在片外闪存的代码段,即目标代码所属的代码段,将目标代码所属的代码段加载至片内内存中的设定空间,即进行一次段重载。段重载后将当前执行位置确定为设定空间内目标代码对应的位置,即,将无返回跳转功能的第一类指令的目的地址重定位为片内内存中设定空间上的地址,将重定位后的设定空间内的地址赋值给PC寄存器,使其跳转到重定位后的设定空间内的地址,即完成了无返回跳转功能的第一类指令的模拟执行。
在一些可能的实施方式中,所述模拟执行所述第一类指令,包括:
响应于确定所述SVC指令的执行会引发跨段跳转,并且,所述SVC指令对应于需返回跳转功能的第一类指令,执行中转函数确定返回地址,在所述返回地址位于所述片内内存中的设定空间对应的地址范围之外时,确定所述返回地址对应的代码段,将所述返回地址对应的代码段加载至所述片内内存中的设定空间,将所述返回地址重定位于所述设定空间内的地址。
当SVC指令的执行会引发跨段跳转,并且,SVC指令对应于需返回跳转功能的第一类指令时,先确定是否需要进行段重载。其中,跳转跨段的模拟执行过程与上述相同,不再赘述,只描述返回跨段的过程。
模拟执行第一类指令时,根据第一类指令与SVC指令的映射关系,解析机器码,计算出需返回跳转功能的第一指令的返回地址。可以是设置中转函数,通过中转函数执行返回,将中转函数的地址赋值给LR寄存器(Link Register,连接寄存器),并且将需返回跳转功能的第一指令的返回地址用栈式数据结构记录在内存中。运行需返回跳转功能的第一指令返回时,将LR寄存器保存的中转函数的地址赋值给PC寄存器,使其跳转执行中转函数,中转函数从内存中取出需返回跳转功能的第一指令的返回地址。
根据需返回跳转功能的第一指令的返回地址的位置,确定是否需要进行段重载,需返回跳转功能的第一指令的模拟执行过程有以下两种情况:
第一种:当返回地址位于片内内存中的设定空间对应的地址范围之内时,不需要进行段重载。将返回地址重定位为片内内存中设定空间上的地址,将重定位后的设定空间内的地址赋值给PC寄存器,使其跳转到重定位后的设定空间内的地址,即完成了需返回跳转功能的第一指令的模拟执行。
第二种:当返回地址位于所述片内内存中的设定空间对应的地址范围之外时,需要进行段重载。确定返回地址对应的片外闪存内的代码段,将返回地址对应的代码段加载至片内内存中的设定空间,即进行一次段重载。段重载后将返回地址重定位于设定空间内的地址,将重定位后的设定空间内的地址赋值给PC寄存器,使其跳转到重定位后的设定空间内的地址,即完成了需返回跳转功能的第一指令的模拟执行。
在一些可能的实施方式中,所述方法还包括:
在与所述设定空间连续并且位于所述设定空间之后的内存中存储用于识别顺序跨段的SVC指令;
在执行所述用于识别顺序跨段的SVC指令时,确定所述设定空间内的代码段在所述片外闪存内的下一代码段,将所述下一代码段加载至所述设定空间,将当前执行位置确定为所述设定空间内第一个指令对应的位置。
为了在片内内存上设定空间中的代码段运行完成后运行过程不中断,在与设定空间连续且位于设定空间后的内存中存储用于识别顺序跨段的SVC指令,该SVC指令不同于上述SVC指令,只用于识别顺序跨段,例如设置为SVC#100。在执行用于识别顺序跨段的SVC指令时,需要先进行段重载。确定设定空间内的代码段在片外闪存内的下一代码段,将下一代码段加载至设定空间内,将当前执行位置确定为设定空间内第一个指令对应的位置。
在一示例中,片内内存上的设定空间中有1000条指令,当顺序运行完1000条指令时,需要运行第1001条指令,而第1001条指令不在设定空间中,即代码段在执行的时候运行或读取的内容超过了当前代码段的范围,该现象为段越界。此时需要在与设定空间连续且位于设定空间后的内存中存储用于识别顺序跨段的SVC指令,以模拟执行顺序跨段,防止出现段越界,中断可执行代码的运行过程。
在本公开示例性的实施例中,将可执行代码对应的多个代码段存储于设定类型处理器的片外闪存,并将其动态加载到片内内存中的设定空间来运行可执行代码,片外闪存可以是任一SPI闪存,不依赖于特定的支持XIP的闪存器件,同时也不依赖于特定的支持MMU、MPU的处理器,使用处理器较小的内存,就能将可执行代码的运行空间大幅扩充,并且不会占用处理器过多的PIN脚资源,有利于将复杂的应用场景实现储存空间小但处理速度快的处理器上,扩大处理器的应用场景,降低对应产品的成本。
本公开提供一个具体的实施例,以逻辑单元的方式实现上述处理可执行代码的方法,设定类型的处理器以ARM Cortex-M处理器为例,片外闪存以无XIP功能的SPI闪存为例,片内内存以片内RAM为例。
如图3所示,包括编译逻辑单元、预处理逻辑单元、烧录逻辑单元、启动逻辑单元、执行逻辑单元、SVC服务异常处理逻辑单元以及模拟指令执行逻辑单元七个逻辑单元。其中,编译逻辑单元、预处理逻辑单元和烧录逻辑单元,属于嵌入式软件开发阶段,运行在电脑上;启动逻辑单元、执行逻辑单元、SVC服务异常处理逻辑单元以及模拟指令执行逻辑单元,存储于ARM Cortex-M处理器原生支持的代码存储器中,例如存储于片内的闪存或ROM(Read-Only Memory,只读存储器)中。
每个逻辑单元执行如下步骤:
编译逻辑单元:软件开发人员通过编译器的参数配置,将编译指令集配置成Thumb-1指令,并将启动逻辑单元、执行逻辑单元、SVC服务异常处理逻辑单元、模拟指令执行逻辑单元分别对应的软件,以及系统及驱动软件,定位于ARM Cortex-M处理器原生支持的代码存储器地址空间上,例如片内闪存地址空间。将除此以外的应用业务软件,即本公开所要处理的可执行代码,定位于片外无XIP功能的Flash地址空间上,编译生成目标可执行代码的二进制镜像文件。
预处理逻辑单元:对编译逻辑单元中编译生成的二进制镜像文件进行提取、解析机器指令,并将定位于片外无XIP功能的闪存地址空间上的位置相关的机器指令替换为SVC系统服务调用指令,根据每条位置相关的机器指令的机器码格式,同类型机器指令需要进一步细分,将细分后的机器指令对应设置一个SVC系统服务调用号,例如按照如下表1所对应的映射关系进行指令替换。并将被替换的指令的机器码和位置保存到一张表格中。
表1
烧录逻辑单元:将启动逻辑单元、执行逻辑单元、SVC服务异常处理逻辑单元、模拟指令执行逻辑单元这四个逻辑单元的软件,以及系统及驱动软件,烧录到其编译时指定地址的处理器原生支持的代码存储器上。将预处理逻辑单元中对定位于片外无XIP功能的闪存地址空间上的修改后的二进制镜像连同保存机器码和位置的表格一起烧录到片外的闪存存储器上。
启动逻辑单元:设备上电启动后依次初始化系统和设备驱动、初始化片内RAM内代码段空间,以及软件全局变量等基本运行环境。获取到应用软件的入口地址,进而根据片外闪存存储应用软件的起始地址,计算得到应用软件入口地址在片外闪存上所处的代码段的起始地址。读取片外闪存,加载代码段到片内RAM内代码段空间,完成第一次段重载。根据“应用软件入口地址-片外闪存代码段的起始地址+片内RAM内代码段空间的起始地址”,计算得出片内RAM内代码段空间上的应用软件入口地址,将重定位得到的应用软件入口地址赋值给PC寄存器(Program Counter Register,程序计数器),使其跳转到该地址处,在片内RAM上开始执行应用软件。另外,启动逻辑单元还会将片内RAM内代码段空间后添加一条固定服务调用号的SVC系统服务调用指令,例如SVC#100,用于识别顺序跨段。
执行逻辑单元:执行片内RAM内代码段空间内的应用软件,当执行到非SVC指令时,正常执行即可,当执行到SVC指令时,就会触发SVC异常,进到统一的SVC系统服务程序中,即进入SVC服务异常处理逻辑单元。
SVC服务异常处理程序逻辑单元:将发生异常时的LR等寄存器保存到堆栈中,然后根据发生异常位置的地址,从片内RAM内代码段空间中取出触发异常的SVC指令的机器码,从机器码解析出服务调用号。若是非处理顺序跨段的服务调用号,则进入模拟指令执行逻辑单元,开始用软件方式模拟执行被SVC指令替换掉的指令;若是处理顺序跨段的服务调用号,则读取片外闪存,加载代码段的下一个段到片内RAM内代码段空间,完成一次段重载。完成软件方式模拟指令执行或段重载后,保存到堆栈中的寄存器会出栈,然后返回到执行逻辑单元执行程序;
模拟指令执行程序逻辑单元:根据位置相关的机器码与SVC指令的映射关系表,查到替换前的指令类型,然后根据发生异常位置的地址,从存储在片外闪存上的保存被替换指令的机器码和位置的表格中查询到被替换指令的机器码。
如果是加载指令(LDR、LDM开头的指令),则解析机器码,计算出需要加载数据的源地址和目的寄存器,然后从片外闪存中读出源地址的数据加载到目的寄存器里,即完成了加载指令的模拟执行。
如果是不包含L的跳转指令(B、BX指令),即不需要返回的跳转指令,则解析机器码,计算出需要跳转到的目的地址,若该地址在当前片外闪存加载代码段的地址范围内,则只需将跳转的目的地址重定位为对应片内RAM内代码段空间上的地址,然后将重定位后的RAM上的目的地址赋值给PC寄存器,使其跳转到RAM上的目的地址,即完成了指令的模拟执行;若该地址不在当前片外闪存加载代码段的地址范围内,则需要计算找到目的地址所在片外闪存的代码段,读取片外闪存,加载该代码段到片内RAM内代码段空间,即进行一次段重载后,再将跳转的目的地址重定位为对应片内RAM内代码段空间上的地址,然后将重定位后的RAM上的目的地址赋值给PC寄存器,使其跳转到RAM上的目的地址,即完成了指令的模拟执行。
如果是包含L的跳转指令(BL、BLX指令),即需要返回的跳转指令,也需要先判断是否需要进行段重载,再将跳转的目的地址重定位为对应片内RAM内代码段空间上的地址。另外需要识别和处理返回跨段,模拟软件设置一个中转函数f,将中转函数f的地址赋值给LR寄存器,并且将真实的返回地址用栈式数据结构记录在内存中,然后再将重定位后的RAM上的目的地址赋值给PC寄存器,使其跳转到RAM上的目的地址,当发生函数返回时,LR寄存器保存的中转函数f的地址赋值给PC寄存器,使其开始执行中转函数f,在中转函数f中,会从内存中取出真实的返回地址,若该返回地址在当前片外闪存加载代码段的地址范围内,则只需将返回地址重定位为对应片内RAM内代码段空间上的地址,然后将重定位后的RAM上的返回地址赋值给PC寄存器,使其跳转到RAM上的返回地址,即完成了指令的模拟执行;若该返回地址不在当前片外闪存加载代码段的地址范围内,则需要计算找到返回地址所在片外闪存的代码段,读取片外闪存,加载该代码段到片内RAM内代码段空间,即进行一次段重载后,再将返回地址重定位为对应片内RAM内代码段空间上的地址,然后将重定位后的RAM上的返回地址赋值给PC寄存器,使其跳转到RAM上的返回地址,即完成了指令的模拟执行。
本公开示例性的实施例中,提供一种处理可执行代码的装置,应用于终端,如图4所示,所述装置包括:
获取模块401,被配置为按照可执行代码的运行逻辑依次从设定类型处理器的片外内存中获取代码段;其中,所述片外内存中存储有所述可执行代码的多个代码段;
加载模块402,被配置为将获取的代码段加载到所述终端的设定类型处理器的片内内存中的设定空间中;
运行模块403,被配置为在所述设定空间中运行所述代码段。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本公开示例性的实施例中,提供一种处理可执行代码的终端,如图5所示,所述终端包括设定类型处理器501、片内内存502和片外闪存503:
设定类型处理器501,被配置为按照可执行代码的运行逻辑依次从设定类型处理器的片外内存中获取代码段;其中,所述片外内存中存储有所述可执行代码的多个代码段;还被配置为将获取的代码段加载到所述终端的设定类型处理器的片内内存中的设定空间中;还被配置为在所述设定空间中运行所述代码段。
图6是根据一示例性的实施例示出的一种处理可执行代码的终端600的框图。
参照图6,终端600可以包括以下一个或多个组件:处理组件602,存储器604,电源组件606,多媒体组件608,音频组件610,输入/输出(I/O)的接口612,传感器组件614,以及通信组件616。
处理组件602通常控制终端600的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件602可以包括一个或多个处理器620来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件602可以包括一个或多个模块,便于处理组件602和其他组件之间的交互。例如,处理组件602可以包括多媒体模块,以方便多媒体组件608和处理组件602之间的交互。
存储器604被配置为存储各种类型的数据以支持在终端600的操作。这些数据的示例包括用于在终端600上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器604可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电源组件606为终端600的各种组件提供电源。电源组件606可以包括电源管理系统,一个或多个电源,及其他与为终端600生成、管理和分配电力相关联的组件。
多媒体组件608包括在所述终端600和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件608包括一个前置摄像头和/或后置摄像头。当终端600处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件610被配置为输出和/或输入音频信号。例如,音频组件610包括一个麦克风(MIC),当终端600处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器604或经由通信组件616发送。在一些实施例中,音频组件610还包括一个扬声器,用于输出音频信号。
I/O接口612为处理组件602和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件614包括一个或多个传感器,用于为终端600提供各个方面的状态评估。例如,传感器组件614可以检测到终端600的打开/关闭状态,组件的相对定位,例如所述组件为终端600的显示器和小键盘,传感器组件614还可以检测终端600或终端600一个组件的位置改变,用户与终端600接触的存在或不存在,终端600方位或加速/减速和终端600的温度变化。传感器组件614可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件614还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件614还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件616被配置为便于终端600和其他设备之间有线或无线方式的通信。终端600可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件616经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件616还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,终端600可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器604,上述指令可由终端600的处理器620执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置的处理器执行时,使得装置能够执行一种调节深色模式显示状态的方法,所述方法包括上述的任一种方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
Claims (13)
1.一种处理可执行代码的方法,应用于终端,其特征在于,所述方法包括:
按照可执行代码的运行逻辑依次从设定类型处理器的片外内存中获取代码段;其中,所述片外内存中存储有所述可执行代码的多个代码段;
将获取的代码段加载到所述终端的设定类型处理器的片内内存中的设定空间中;
在所述设定空间中运行所述代码段。
2.如权利要求1所述的方法,其特征在于,
所述片内内存中的设定空间的存储容量大于或等于任一代码段的信息容量。
3.如权利要求1或2所述的方法,其特征在于,
所述方法还包括:
在获取代码段后,对所述代码段进行编译,将所述代码段中的所述第一类指令替换为相应的SVC指令将执行完替换的所述代码段加载到设定类型处理器的片内内存中的设定空间;
在运行至所述系统服务调用SVC指令的位置时,产生软中断,确定SVC指令对应的第一类指令,模拟执行所述第一类指令;
其中,所述第一类指令是与运行位置相关的指令。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
确定所述第一类指令与所述SVC指令之间一一对应的映射关系。
5.如权利要求3或4所述的方法,其特征在于,所述方法还包括:
在执行SVC指令之前或同时,确定所述SVC指令的执行是否会引发跨段跳转。
6.如权利要求5所述的方法,其特征在于,所述模拟执行所述第一类指令,包括:
响应于确定所述SVC指令的执行会引发跨段跳转,并且,所述SVC指令对应于加载功能的第一类指令,将所述SVC指令对应的加载数据加载至相应的寄存器。
7.如权利要求5所述的方法,其特征在于,所述模拟执行所述第一类指令,包括:
响应于确定所述SVC指令的执行会引发跨段跳转,并且,所述SVC指令对应于无返回跳转功能的第一类指令,确定跳转对应的目标代码所属的代码段,将所述目标代码所属的代码段加载至所述片内内存中的设定空间,将当前执行位置确定为所述设定空间内所述目标代码对应的位置。
8.如权利要求5所述的方法,其特征在于,所述模拟执行所述第一类指令,包括:
响应于确定所述SVC指令的执行会引发跨段跳转,并且,所述SVC指令对应于需返回跳转功能的第一类指令,执行中转函数确定返回地址,在所述返回地址位于所述片内内存中的设定空间对应的地址范围之外时,确定所述返回地址对应的代码段,将所述返回地址对应的代码段加载至所述片内内存中的设定空间,将所述返回地址重定位于所述设定空间内的地址。
9.如权利要求1或2所述的方法,其特征在于,所述方法还包括:
在与所述设定空间连续并且位于所述设定空间之后的内存中存储用于识别顺序跨段的SVC指令;
在执行所述用于识别顺序跨段的SVC指令时,确定所述设定空间内的代码段在所述片外闪存内的下一代码段,将所述下一代码段加载至所述设定空间,将当前执行位置确定为所述设定空间内第一个指令对应的位置。
10.一种处理可执行代码的装置,应用于终端,其特征在于,所述装置包括:
获取模块,被配置为按照可执行代码的运行逻辑依次从设定类型处理器的片外内存中获取代码段;其中,所述片外内存中存储有所述可执行代码的多个代码段;
加载模块,被配置为将获取的代码段加载到所述终端的设定类型处理器的片内内存中的设定空间中;
运行模块,被配置为在所述设定空间中运行所述代码段。
11.一种处理可执行代码的终端,其特征在于,所述终端包括设定类型处理器、片内内存和片外闪存:设定类型处理器,被配置为按照可执行代码的运行逻辑依次从设定类型处理器的片外内存中获取代码段;其中,所述片外内存中存储有所述可执行代码的多个代码段;还被配置为将获取的代码段加载到所述终端的设定类型处理器的片内内存中的设定空间中;还被配置为在所述设定空间中运行所述代码段。
12.一种处理可执行代码的装置,其特征在于,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行如权利要求1-9中任一项所述的方法。
13.一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置的处理器执行时,使得装置能够执行如权利要求1-9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210323863.7A CN114637535A (zh) | 2022-03-30 | 2022-03-30 | 一种处理可执行代码的方法、装置、终端及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210323863.7A CN114637535A (zh) | 2022-03-30 | 2022-03-30 | 一种处理可执行代码的方法、装置、终端及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114637535A true CN114637535A (zh) | 2022-06-17 |
Family
ID=81951325
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210323863.7A Pending CN114637535A (zh) | 2022-03-30 | 2022-03-30 | 一种处理可执行代码的方法、装置、终端及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114637535A (zh) |
-
2022
- 2022-03-30 CN CN202210323863.7A patent/CN114637535A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2945058B1 (en) | Processing method and device for application program | |
US20190213019A1 (en) | Application program page processing method and device | |
CN105468410B (zh) | 系统升级方法及装置 | |
CN104281478B (zh) | 更新应用程序的方法及装置 | |
WO2018040270A1 (zh) | 在Windows系统中加载Linux系统ELF文件的方法及装置 | |
CN113204377B (zh) | 一种动态链接库的加载方法及装置 | |
CN111736916A (zh) | 基于Java语言的动态扩展方法、装置、电子设备及存储介质 | |
CN109933381A (zh) | 一种内核的加载方法及装置 | |
CN110781080A (zh) | 程序调试方法及装置、存储介质 | |
CN112416352A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN112925718A (zh) | 调用栈回溯方法、装置、设备和介质 | |
EP3327565A1 (en) | Method and equipment for running a file | |
CN116643778B (zh) | 一种应用程序优化方法及电子设备 | |
WO2024067348A2 (zh) | 内存分配器确定方法、装置、电子设备及存储介质 | |
CN113296841A (zh) | 应用程序处理方法、装置、设备及介质 | |
CN110045997B (zh) | 基础功能模块的对象初始化方法、装置、设备和存储介质 | |
CN116661882B (zh) | 预加载小程序的方法、电子设备及存储介质 | |
CN108268298B (zh) | 桌面图标的生成方法、装置、存储介质及电子设备 | |
CN114637535A (zh) | 一种处理可执行代码的方法、装置、终端及可读存储介质 | |
CN116414744A (zh) | 信息处理方法、装置及电子设备 | |
CN111399926A (zh) | 下载启动程序的方法和装置 | |
CN110874259A (zh) | 程序执行方法、装置、设备和存储介质 | |
CN110569037B (zh) | 数据写入的方法和装置 | |
CN109918132B (zh) | 一种指令安装方法、装置、电子设备及存储介质 | |
CN108804221B (zh) | 基于xip方式的嵌入式系统及其资源优化方法 |
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 |