用于嵌入式异构仿真的内存映射方法技术

技术编号:39055892 阅读:20 留言:0更新日期:2023-10-12 19:49
本发明专利技术公开了用于嵌入式异构仿真的内存映射方法,包括以下步骤:步骤一,查找变量;步骤二,添加自定义元类型定义;步骤三,添加引用声明及初始化;步骤四,取消宏定义;步骤五,填写返回值;本发明专利技术解决了加速函数处理过程中对寄存器运算中需要手动加入的问题,对副作用回调函数的加入,降低了对用户源代码的修改,用户源代码的处理仅放置在了函数最开始和结尾处;本发明专利技术解决了宿主机与仿真目标机大小端不一致的问题,所有多字节元类型均进行了类重写,所有的大小端转换操作都在运算符重载中进行,由于大小端转换操作被内聚在了重写类中,解除了与用户源代码的耦合,无需担心大小端互转的对偶问题,提高了安全性。提高了安全性。提高了安全性。

【技术实现步骤摘要】
用于嵌入式异构仿真的内存映射方法


[0001]本专利技术涉及计算机异构仿真
,具体为用于嵌入式异构仿真的内存映射方法。

技术介绍

[0002]在嵌入式开发过程中,搭建虚拟平台并对目标码进行虚拟运行能够快速的实现对嵌入式程序的测试,甚至能够与宿主机内的其它算法进程进行交互,从而实现集成测试,具有与硬件平台不能比拟的优势,但由于宿主机与目标机不是同类结构,导致对目标机的指令集或寄存器进行仿真时,由于宿主机不存在此类结构,使得宿主机内的仿真平台不得不采用复杂的方式对目标机的结构进行等效实现,仿真速度大幅降低,甚至与目标机的运行速度低一个数量级,而实际上,目标机中的某些程序往往是相当成熟的库函数,其代码具有很强的持久性,不需要修改,这部分代码正是仿真加速中可以被考虑的那部分,函数加速实质,某些成熟的函数不被以其编译目标码方式进行执行,而将其编译为宿主机的目标码被仿真程序以调用的方式执行;函数中的变量为目标程序的全局变量、指针、寄存器时,以引用或指针传递的方式作为参数传递给调用函数,对端口寄存器的操作可能会给CPU的运行带来其它副作用,如引发仿真平台中对某些特定函数的回调等,这是需要对准备加速的函数中的寄存器操作语句上下文处由人工添加响应的这些回调函数,是相当麻烦且易出错的一个地方,加速函数的替换主要采用成熟API或人工编写,而在人工编写过程中,面临的寄存器操作和宿主机

目标机大小端不一致的情况以及寄存器变量的操作可能存在对目标机的特定操作的调用情况。
[0003]目前流行的应对方式为,采用人工方式对寄存器运算的调用操作进行操作函数替换,在函数初始位置对全局变量拷贝进行大小端转换,函数退出之前再进行一次大小端转换并回写入目标机内存中;对于指针型变量,先对该段内存的内容进行拷贝并大小端转换,在函数退出之前再对拷贝段进行一次大小端并回写入目标机的内存段,由于以上情况需要人工干预的情况较多,使得在制作定制函数时需要建立在具有对仿真平台架构和原理的了解的基础上,且大小端变换时容易导致疏忽导致错误发生。

技术实现思路

[0004]本专利技术的目的在于提供用于嵌入式异构仿真的内存映射方法,以解决上述
技术介绍
中提出的问题。
[0005]为实现上述目的,本专利技术提供如下技术方案:用于嵌入式异构仿真的内存映射方法,包括以下步骤:步骤一,查找变量;步骤二,添加自定义元类型定义;步骤三,添加引用声明及初始化;步骤四,取消宏定义;步骤五,填写返回值;
[0006]其中在上述步骤一中,在需要加速的函数中,查找全局变量或指向本函数外地址的指针型变量;
[0007]其中在上述步骤二中,在被加速函数的开始位置添加自定义元类型的定义;
[0008]其中在上述步骤三中,加入对全局变量的引用声明及初始化、对指针变量的声明及初始化以及对寄存器变量的声明及初始化;
[0009]其中在上述步骤四中,加入对自定义元类型的取消宏定义,以使得后续用户代码继续使用其原本对应的类型;
[0010]其中在上述步骤五中,如果函数存在返回值,则需要调用仿真平台的寄存器读写API将返回值写入相应的返回值装载寄存器。
[0011]优选的,所述步骤一中,对宿主机和目标机无大小端差异的情况下,仅需要对寄存器类型进行实现,该类型中包括记录寄存器地址的成员变量,需对该类型的赋值、取值的运算符进行重写,包括“++”、
“‑‑”
、“+=”、
“‑
=”和“=”,即与其原始类型长度一致的某一类型的强制类型转换函数。
[0012]优选的,所述步骤一中,对宿主机和目标机大小端相反的情况下,除步骤一中的要求外,需要对非单字节元类型的重写,包括但不限于“int”、“short”、“float”、“double”和“long”,该类型中包含一个与其对应的元类型长度相同的变量,用于在数组操作时能够偏移正确的长度,需对该类型的赋值、取值的运算符进行重写,包括“++”、
“‑‑”
、“+=”、
“‑
=”和“=”,即与其原始类型长度一致的某一类型的强制类型转换函数,其中所有的运算符重载中,均需要进行一次大小端转换。
[0013]优选的,所述对非单字节元类型的重写,包括但不限于“int”、“short”、“float”、“double”和“long”。
[0014]优选的,所述步骤二中,自定义元类型的定义包括但不限于#define short_short、#define double_double和#define int_int。
[0015]优选的,所述步骤四中,对自定义元类型的取消宏定义包括但不限于#undef short、#undef double和#undef int。
[0016]与现有技术相比,本专利技术的有益效果是:本专利技术解决了加速函数处理过程中对寄存器运算中需要手动加入的问题,对副作用回调函数的加入,降低了对用户源代码的修改,用户源代码的处理仅放置在了函数最开始和结尾处;本专利技术解决了宿主机与仿真目标机大小端不一致的问题,所有多字节元类型均进行了类重写,所有的大小端转换操作都在运算符重载中进行,由于大小端转换操作被内聚在了重写类中,解除了与用户源代码的耦合,无需担心大小端互转的对偶问题,提高了安全性。
附图说明
[0017]图1为本专利技术的方法流程图;
[0018]图2为本专利技术查找全局变量或指向本函数外地址的指针型变量的程序图;
[0019]图3为本专利技术short型变量的储存示意图;
[0020]图4为本专利技术对元类型short的类型重写程序图;
[0021]图5为本专利技术支持引用型变量声明的程序图;
[0022]图6为本专利技术引用型形参传递的程序图;
[0023]图7为本专利技术获取并使用被引用值地址的程序图;
[0024]图8为本专利技术对赋值操作符重载示例的程序图;
[0025]图9为本专利技术short类型重写例程的程序图。
具体实施方式
[0026]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0027]请参阅图1

9,本专利技术提供的一种实施例:用于嵌入式异构仿真的内存映射方法,包括以下步骤:步骤一,查找变量;步骤二,添加自定义元类型定义;步骤三,添加引用声明及初始化;步骤四,取消宏定义;步骤五,填写返回值;
[0028]其中在上述步骤一中,在需要加速的函数中,查找全局变量或指向本函数外地址的指针型变量;
[0029]在得到用户源代码后,首先对全局作用域的实体变量、指针型变量、引用型形参变量及寄存器变量进行映射处理,该映射处理的实现将放置用户函数的开始位置;
[0030]映射的方式为,获取仿真平台本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.用于嵌入式异构仿真的内存映射方法,包括以下步骤:步骤一,查找变量;步骤二,添加自定义元类型定义;步骤三,添加引用声明及初始化;步骤四,取消宏定义;步骤五,填写返回值;其特征在于:其中在上述步骤一中,在需要加速的函数中,查找全局变量或指向本函数外地址的指针型变量;其中在上述步骤二中,在被加速函数的开始位置添加自定义元类型的定义;其中在上述步骤三中,加入对全局变量的引用声明及初始化、对指针变量的声明及初始化以及对寄存器变量的声明及初始化;其中在上述步骤四中,加入对自定义元类型的取消宏定义,以使得后续用户代码继续使用其原本对应的类型;其中在上述步骤五中,如果函数存在返回值,则需要调用仿真平台的寄存器读写API将返回值写入相应的返回值装载寄存器。2.根据权利要求1所述的用于嵌入式异构仿真的内存映射方法,其特征在于:所述步骤一中,对宿主机和目标机无大小端差异的情况下,仅需要对寄存器类型进行实现,该类型中包括记录寄存器地址的成员变量,需对该类型的赋值、取值的运算符进行重写,包括“++”、
“‑‑”
、“+=”、
“‑
=”和“=”,即与其原始类型长度一致的某一类型的强制类型转换函数。3.根据权利要求1所述的用于嵌入式异构仿真的内存映射方法,其特征在于:所述步骤一中,对宿主...

【专利技术属性】
技术研发人员:李根吴瑾郭向英于婷婷高栋栋王博祥刘璟炜盛庄
申请(专利权)人:北京轩宇信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1