一种高效的内存访问方法与流程

文档序号:12905896阅读:761来源:国知局
一种高效的内存访问方法与流程

本发明属于嵌入式软件开发的技术领域,特别涉及一种内存的访问方法。



背景技术:

目前应用程序五花八门,但是这些应用程序基本上都是使用一种或者多种开发语言和集成开发环境(ide)进行开发,对于开发者来说,编写代码肯定会涉及到内存访问,包括直接内存访问和间接内存访问,不管高阶开发语言如c、c++、java等,还是低阶的开发语言如:pic、6502等来说,访问变量归根结底最后都会生成汇编指令如:movwfvar(把work寄存器移到var变量中),但是大部分risc体系结构的ic内存存在多个page,每个page中又分为2个bank,如:page0有bank0、bank1两个bank;page1有bank2、bank3两个bank,以此类推,由于体系结构的限制,一般page不会超过4个,在risc体系结构中由于数据总线的限制要直接访问变量就要先切换到变量所在的page,然后再进行访问,间接访问不仅要切换page,还要切换bank,由此访问一个变量操作太麻烦,不仅要先判断变量所在的page、bank,而且还要设置对应的切换page、bank指令,这样不仅影响方案开发的效率,最致命的是太容易出错,而且灵活度太差,如果后续修改var变量放置在其他page中,那么又要修改代码,难以保证方案开发过程中访问变量的高效率、灵活、稳定性。

如专利申请201610465148.1公开了一种移动终端和内存释放控制方法,该移动终端包括:应用筛选模块,用于检测到后台应用管理指令,并选出移动终端在过去的预设时长内开启的历史应用;列表显示模块,用于在移动终端预设显示区域显示包括历史应用对应历史应用标识的后台应用列表;指令接收模块,用于接收用户基于后台应用列表输入的选择指令,并确定选择指令选中的历史应用标识;内存释放模块,用于释放选择指令选中的历史应用标识对应历史应用所占用的内存。该申请只是利用选择指令释放历史应用标识对应历史应用所占用的内存,只能暂时性地释放内存,并不能直接或间接地访问内存,无法做到开发过程中访问变量的高效性和可靠性。



技术实现要素:

基于此,因此本发明的首要目地是提供一种高效的内存访问方法,该方法能够高效的直接或间接访问内存,保证方案开发过程中访问变量的高效率、灵活、稳定性。

本发明的另一个目地在于提供一种高效的内存访问方法,该方法实现简便,成本低廉,便于为软件开发人员所应用。

为实现上述目的,本发明的技术方案为:

一种高效的内存访问方法,其特征在于该方法定义伪指令,使用简单的伪指令替换page、bank选择指令,并依靠编译工具链解析伪指令,最后使用真正的指令纠正伪指令,从而提高用户方案开发效率且不会出错。

其中,所述定义伪指令:针对直接、间接内存访问分别定义一条伪指令,替代内存访问前的page选择指令。

进一步,定义memsel伪指令来替换直接内存访问前的page选择,直接访问变量var前,无需再根据var变量所在的page来使用bsf指令来切换page,只要在直接访问var之前使用memselvar这条指令即可。

进一步,定义memisel伪指令来替换间接内存访问前的page、bank选择,间接访问变量var前,无需再根据var变量所在的page、bank来使用bsf,bcf等指令来切换page、bank,只要在间接var之前使用memiselvar这条指令即可。

所述解析伪指令:把直接、间接访问内存伪指令进行解析为特定的指令存储到目标文件中。

进一步,解析伪指令通过编译器进行解析,编译器负责对memsel、memisel进行解析,并根据此ic内存布局来决定生成特定的指令,但是由于编译时还未确定变量最终分配的位置,所以不能准确地生成page、bank选择指令,因此只能使用相同指令条数的特定指令替换,如用nop指令替换,待指令纠正模块再把nop指令纠正为真正的page、bank指令,即bsf、bcf指令。

所述指令纠正:把存储在目标文件中的特定的指令纠正为真正的page、bank选择指令,从而达到能够真正切换page、bank的目的,进而能够正确访问内存。

进一步,指令纠正,负责把解析伪指令中产生的nop指令替换成正确的page、bank选择指令,即:bsforbcf指令。由于解析伪指令模块把需要更正的地址都写到重定向表中,再加上指令纠正模块已经确切知道变量分配的位置,所以指令纠正模块通过查找重定向表,依次把表中每条记录中对应地址所指向的nop指令使用真正的bsf、bcf指令的机器码替换,完成指令纠正。

本发明所实现的高效的内存访问方法,通过对伪指令的定义、解析及纠正,能够高效的直接或间接访问内存,保证方案开发过程中访问变量的高效率、灵活、稳定性。

附图说明

图1是本发明所实现定义memsel伪指令的代码示意图。

图2是本发明所实现使用memsel伪指令的代码示意图。

图3是本发明所实现解析伪指令的流程图。

图4是本发明所实现指令纠正的流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明所实现的高效的内存访问方法,首先定义伪指令,然后使用简单的伪指令替换page、bank选择指令,并依靠编译工具链解析伪指令,最后使用真正的指令纠正伪指令,从而提高用户方案开发效率且不会出错。

定义伪指令,是针对直接内存访问和间接内存访问分别定义一条伪指令替换page、bank选择指令。

1)如图1所示,定义memsel伪指令来替换直接内存访问前的page选择,如直接访问变量var前,用户无需再根据var变量所在的page来使用bsf指令来切换page,只要在直接访问var之前使用memselvar这条指令即可。

2)定义memisel伪指令来替换间接内存访问前的page、bank选择,如间接访问变量var前,用户无需再根据var变量所在的page、bank来使用bsf,bcf等指令来切换page、bank,只要在间接var之前使用memiselvar这条指令即可。如图2所示。

解析伪指令,是发生在编译器,编译器负责对memsel、memisel进行解析,并根据此ic内存布局来决定生成特定的指令,但是由于编译时还未确定变量最终分配的位置,所以不能准确地生成page、bank选择指令,因此只能使用相同指令条数的特定指令替换,如用nop指令替换,待指令纠正模块再把nop指令纠正为真正的page、bank指令,即bsf、bcf指令。解析指令的实现流程图如图3所示:

101、首先,初始化解析指令模块,获取文档中所有汇编指令保存到容器;

102、从容器中提取一条条汇编指令;

103、判断汇编指令是否提取完毕,若提取完毕,则转到步骤109,生成目标文件,若没有提取完毕,则进行下一步,

104、进一步判断汇编指令是否是memsel/memisel伪指令;如果提取的汇编指令不是memsel/memisel伪指令,则转到步骤108,提取容器中下一条汇编指令;若是memsel/memisel伪指令,则进行下一步;

105、获取目标型号ic的page数;

106、根据page数确定切换page需要的指令数;

107、使用相同数目nop指令填充,并记录纠正地址到重定向表中;

108、提取容器中下一条汇编指令,并转到步骤103;

109、生成目标文件。

指令纠正,负责把解析伪指令中产生的nop指令替换成正确的page、bank选择指令,即:bsforbcf指令。由于解析伪指令模块把需要更正的地址都写到重定向表中,再加上指令纠正模块已经确切知道变量分配的位置,所以指令纠正模块通过查找重定向表,依次把表中每条记录中对应地址所指向的nop指令使用真正的bsf、bcf指令的机器码替换,完成指令纠正,该模块的实现流程图如图4所示:

201、初始化指令纠正模块,打开目标文件;

202、获取目标文件重定向表;

203、提取重定向表一条条记录;

204、判断是否提取成功;如果否,则转到209步骤,完成指令纠正,关闭目标文件;如果是,则继续下一步;

205、获取目标型号ic的page数;

206、获取变量最后locate的page数,确定更正所使用的指令;

207、使用更正的指令替换重定向表中记录的纠正地址所指向的指令;

208、提取重定向表中下一条记录,并转到204步骤;

209、完成指令纠正,关闭目标文件。

本发明所实现的高效的内存访问方法,通过对伪指令的定义、解析及纠正,能够高效的直接或间接访问内存,保证方案开发过程中访问变量的高效率、灵活、稳定性。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1