[发明专利]一种程序模块动态装载方法有效
申请号: | 201710585570.5 | 申请日: | 2017-07-18 |
公开(公告)号: | CN107391190B | 公开(公告)日: | 2020-10-13 |
发明(设计)人: | 修志芳;李春强;尚云海;童琪杰;陈林飞 | 申请(专利权)人: | 杭州中天微系统有限公司 |
主分类号: | G06F8/61 | 分类号: | G06F8/61 |
代理公司: | 北京思睿峰知识产权代理有限公司 11396 | 代理人: | 谢建云;赵爱军 |
地址: | 310012 浙江省杭州市*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 程序 模块 动态 装载 方法 | ||
1.一种程序模块动态装载方法,其特征在于,包括:
步骤一、提供编译系统,用于将程序源码编译生成可动态装载的程序模块,所述程序模块包括二进制代码段和数据段;
步骤二、提供动态装载器,所述动态装载器包括用于将所述程序模块安装到程序模块存储空间的安装模块,以及用于在运行时将所述程序模块装载到运行时数据存储空间的装载模块;
步骤三、所述程序模块的二进制代码段通过所述运行时数据存储空间中的程序模块数据段基地址映射表计算所述程序源码中的全局变量地址;
步骤四、读写并引用所述全局变量地址对应的全局变量;
其中,所述步骤三还包括通过计算式,ADDRvar=BDATA+OFFSETvar,计算得到所述全局变量地址ADDRvar,式中,BDATA为运行时数据存储空间中的数据段基地址,OFFSETvar为所述全局变量的数据段偏移量,
其中,所述数据段基地址BDATA从数据段基地址存放地址ADDRDB中得到,所述数据段基地址存放地址ADDRDB通过计算式,
ADDRDB=Gmodule+Imodule×数据段基地址宽度,
计算得到,式中,Gmodule为所述程序模块数据段基地址映射表基地址,Imodule为程序模块索引号。
2.根据权利要求1所述的方法,其特征在于,所述程序模块存储空间划分为大小相等的存储块,并以存储块大小对齐的方式存放所述程序模块的二进制代码段和数据段。
3.根据权利要求2所述的方法,其特征在于,所述装载模块在所述运行时数据存储空间中为所述程序模块分配用于存放运行时数据段的运行时数据存储空间。
4.根据权利要求2所述的方法,其特征在于,所述程序模块数据段基地址映射表中的每个表项对应一个程序模块存储空间中的所述存储块以及所述存储块的存储块索引号。
5.根据权利要求4所述的方法,其特征在于,所述存储块索引号CNTblock通过下式
CNTblock=(ADDRblock-Bflash)log2(Sblock)
计算而得,其中ADDRblock为程序模块所占用的存储块基地址,Sblock为存储块大小,Bflash为程序模块存储空间基地址。
6.根据权利要求1所述的方法,其特征在于,所述程序模块数据段基地址映射表基地址Gmodule记录在寄存器中。
7.根据权利要求1所述的方法,其特征在于,所述程序模块索引号Imodule通过下式
Imodule=(PC-Bflash)log2(Sblock)
计算得到,其中,PC为程序计数器值,Bflash为所述程序模块存储空间的基地址,Sblock为存储块大小。
8.根据权利要求1所述的方法,其特征在于,所述程序模块的二进制代码段包括全局变量初始化函数和所述全局变量初始化函数的调用程序,且由所述全局变量初始化函数完成对所述全局变量的引用。
9.根据权利要求8所述的方法,其特征在于,所述全局变量初始化函数包括将对所述全局变量的引用转换为对其他全局变量的引用。
10.根据权利要求8所述的方法,其特征在于,所述全局变量初始化函数在所述程序模块被转载到所述运行时数据存储空间时由所述装载模块调用。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州中天微系统有限公司,未经杭州中天微系统有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710585570.5/1.html,转载请声明来源钻瓜专利网。
- 上一篇:星载软件的在轨编程方法
- 下一篇:一种程序模块动态装载方法