CN107341002B - 一种内存访问方法 - Google Patents
一种内存访问方法 Download PDFInfo
- Publication number
- CN107341002B CN107341002B CN201710441148.2A CN201710441148A CN107341002B CN 107341002 B CN107341002 B CN 107341002B CN 201710441148 A CN201710441148 A CN 201710441148A CN 107341002 B CN107341002 B CN 107341002B
- Authority
- CN
- China
- Prior art keywords
- instruction
- pseudo
- page
- instructions
- memory access
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种高效的内存访问方法,该方法定义伪指令,使用简单的伪指令替换PAGE、BANK选择指令,并依靠编译工具链解析伪指令,最后使用真正的指令纠正伪指令,从而提高用户方案开发效率且不会出错。本发明通过对伪指令的定义、解析及纠正,能够高效的直接或间接访问内存,保证方案开发过程中访问变量的高效率、灵活、稳定性。
Description
技术领域
本发明属于嵌入式软件开发的技术领域,特别涉及一种内存的访问方法。
背景技术
目前应用程序五花八门,但是这些应用程序基本上都是使用一种或者多种开发语言和集成开发环境(IDE)进行开发,对于开发者来说,编写代码肯定会涉及到内存访问,包括直接内存访问和间接内存访问,不管高阶开发语言如C、C++、Java等,还是低阶的开发语言如:PIC、6502等来说,访问变量归根结底最后都会生成汇编指令如:MOVWF var(把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之前使用MEMSEL var这条指令即可。
进一步,定义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选择指令,即:bsf or bcf指令。由于解析伪指令模块把需要更正的地址都写到重定向表中,再加上指令纠正模块已经确切知道变量分配的位置,所以指令纠正模块通过查找重定向表,依次把表中每条记录中对应地址所指向的NOP指令使用真正的bsf、bcf指令的机器码替换,完成指令纠正。
本发明所实现的内存访问方法,通过对伪指令的定义、解析及纠正,能够高效的直接或间接访问内存,保证方案开发过程中访问变量的高效率、灵活、稳定性。
附图说明
图1是本发明所实现定义MEMSEL伪指令的代码示意图。
图2是本发明所实现使用MEMSEL伪指令的代码示意图。
图3是本发明所实现解析伪指令的流程图。
图4是本发明所实现指令纠正的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明所实现的内存访问方法,首先定义伪指令,然后使用简单的伪指令替换PAGE、BANK选择指令,并依靠编译工具链解析伪指令,最后使用真正的指令纠正伪指令,从而提高用户方案开发效率且不会出错。
定义伪指令,是针对直接内存访问和间接内存访问分别定义一条伪指令替换PAGE、BANK选择指令。
1)如图1所示,定义MEMSEL伪指令来替换直接内存访问前的PAGE选择,如直接访问变量var前,用户无需再根据var变量所在的PAGE来使用bsf指令来切换PAGE,只要在直接访问var之前使用MEMSEL var这条指令即可。
2)定义MEMISEL伪指令来替换间接内存访问前的PAGE、BANK选择,如间接访问变量var前,用户无需再根据var变量所在的PAGE、BANK来使用bsf,bcf等指令来切换PAGE、BANK,只要在间接var之前使用MEMISEL var这条指令即可。如图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选择指令,即:bsf or bcf指令。由于解析伪指令模块把需要更正的地址都写到重定向表中,再加上指令纠正模块已经确切知道变量分配的位置,所以指令纠正模块通过查找重定向表,依次把表中每条记录中对应地址所指向的NOP指令使用真正的bsf、bcf指令的机器码替换,完成指令纠正,该模块的实现流程图如图4所示:
201、初始化指令纠正模块,打开目标文件;
202、获取目标文件重定向表;
203、提取重定向表一条条记录;
204、判断是否提取成功;如果否,则转到209步骤,完成指令纠正,关闭目标文件;如果是,则继续下一步;
205、获取目标型号IC的PAGE数;
206、获取变量最后Locate的PAGE数,确定更正所使用的指令;
207、使用更正的指令替换重定向表中记录的纠正地址所指向的指令;
208、提取重定向表中下一条记录,并转到204步骤;
209、完成指令纠正,关闭目标文件。
本发明所实现的高效的内存访问方法,通过对伪指令的定义、解析及纠正,能够高效的直接或间接访问内存,保证方案开发过程中访问变量的高效率、灵活、稳定性。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (4)
1.一种内存访问方法,其特征在于:该方法定义伪指令,使用简单的伪指令替换PAGE、BANK选择指令,并依靠编译工具链解析伪指令,最后使用真正的指令纠正伪指令;
所述定义伪指令:针对直接、间接内存访问分别定义一条伪指令,替代内存访问前的PAGE、BANK选择指令;
定义MEMSEL伪指令来替换直接内存访问前的PAGE选择,直接访问变量var前,无需再根据var变量所在的PAGE来使用bsf指令来切换PAGE,只要在直接访问var之前使用MEMSELvar这条指令即可;
定义MEMISEL伪指令来替换间接内存访问前的PAGE、BANK选择,间接访问变量var前,无需再根据var变量所在的PAGE、BANK来使用bsf,bcf指令来切换PAGE、BANK,只要在间接访问var之前使用MEMISEL var这条指令即可;
解析指令的实现流程为:
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选择指令,即bsf、bcf指令,指令纠正的具体步骤为:
201、初始化指令纠正模块,打开目标文件;
202、获取目标文件重定向表;
203、提取重定向表一条条记录;
204、判断是否提取成功;如果否,则转到209步骤,完成指令纠正,关闭目标文件;如果是,则继续下一步;
205、获取目标型号IC的PAGE数;
206、获取变量最后Locate的PAGE数,确定更正所使用的bsf、bcf指令;
207、使用bsf、bcf指令替换重定向表中记录的纠正地址所指向的指令;
208、提取重定向表中下一条记录,并转到204步骤;
209、完成指令纠正,关闭目标文件。
2.如权利要求1所述的内存访问方法,其特征在于:所述解析伪指令:把直接、间接访问内存伪指令进行解析为特定的指令存储到目标文件中。
3.如权利要求1所述的内存访问方法,其特征在于:解析伪指令通过编译器进行解析,编译器负责对MEMSEL、MEMISEL进行解析,并根据此IC 内存布局来决定生成特定的指令,只使用相同指令条数的特定指令进行替换。
4.如权利要求1所述的内存访问方法,其特征在于:所述指令纠正:把存储在目标文件中的特定的指令纠正为真正的PAGE、BANK选择指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710441148.2A CN107341002B (zh) | 2017-06-13 | 2017-06-13 | 一种内存访问方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710441148.2A CN107341002B (zh) | 2017-06-13 | 2017-06-13 | 一种内存访问方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107341002A CN107341002A (zh) | 2017-11-10 |
CN107341002B true CN107341002B (zh) | 2021-01-19 |
Family
ID=60220485
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710441148.2A Active CN107341002B (zh) | 2017-06-13 | 2017-06-13 | 一种内存访问方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107341002B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020233387A1 (zh) * | 2019-05-17 | 2020-11-26 | 上海寒武纪信息科技有限公司 | 指令处理方法、装置及相关产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5701270A (en) * | 1994-05-09 | 1997-12-23 | Cirrus Logic, Inc. | Single chip controller-memory device with interbank cell replacement capability and a memory architecture and methods suitble for implementing the same |
CN1952897A (zh) * | 2005-10-18 | 2007-04-25 | 中国科学院计算技术研究所 | 一种基于数据流分析的访存合并优化方法 |
CN101539867A (zh) * | 2009-04-23 | 2009-09-23 | 上海交通大学 | 动态二进制翻译系统中可重定向的寄存器分配方法 |
CN106775595A (zh) * | 2015-11-25 | 2017-05-31 | 龙芯中科技术有限公司 | Mips平台数据访问方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010198398A (ja) * | 2009-02-26 | 2010-09-09 | Hitachi Ltd | 計算機装置および制御方法 |
-
2017
- 2017-06-13 CN CN201710441148.2A patent/CN107341002B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5701270A (en) * | 1994-05-09 | 1997-12-23 | Cirrus Logic, Inc. | Single chip controller-memory device with interbank cell replacement capability and a memory architecture and methods suitble for implementing the same |
CN1952897A (zh) * | 2005-10-18 | 2007-04-25 | 中国科学院计算技术研究所 | 一种基于数据流分析的访存合并优化方法 |
CN101539867A (zh) * | 2009-04-23 | 2009-09-23 | 上海交通大学 | 动态二进制翻译系统中可重定向的寄存器分配方法 |
CN106775595A (zh) * | 2015-11-25 | 2017-05-31 | 龙芯中科技术有限公司 | Mips平台数据访问方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107341002A (zh) | 2017-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9146715B1 (en) | Suppression of table of contents save actions | |
US9250875B1 (en) | Table of contents pointer value save and restore placeholder positioning | |
CN107291480B (zh) | 一种函数调用方法及装置 | |
AU2021250948B2 (en) | Load module compiler | |
US7895569B2 (en) | System and method for implementing software breakpoints in an interpreter | |
Wang et al. | Uroboros: Instrumenting stripped binaries with static reassembling | |
CN101520737B (zh) | 编译方法和使用该编译方法的处理器 | |
US7107579B2 (en) | Preserving program context when adding probe routine calls for program instrumentation | |
US20200073643A1 (en) | Direct function call substitution using preprocessor | |
KR100537258B1 (ko) | 디버그지원장치,프로그램번역장치,컴퓨터판독가능한디버그지원프로그램을기록한기록매체,프로그램번역프로그램을기록한기록매체 | |
WO2005083565A2 (en) | Method and system for performing link-time code optimization without additional code analysis | |
CN106406972B (zh) | 程序编译方法和编译器 | |
US6519768B1 (en) | Instruction translation method | |
CN103677778A (zh) | 一种CAP文件Classref常量的解析方法 | |
CN107341002B (zh) | 一种内存访问方法 | |
US8769498B2 (en) | Warning of register and storage area assignment errors | |
US9940267B2 (en) | Compiler global memory access optimization in code regions using most appropriate base pointer registers | |
CN104376126A (zh) | 在Linux驱动中绑定内核符号的方法及装置 | |
CN107562430B (zh) | 一种针对移动π演算语言的文件处理功能的编译方法 | |
US9606779B2 (en) | Data processing system and data simulation method in the system | |
US20030131345A1 (en) | Employing value prediction with the compiler | |
CN113260976A (zh) | 用于在编译源代码中调度指令技术 | |
US7676799B1 (en) | Address simplification by binary transformation | |
KR20040044655A (ko) | 자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법 | |
EP1033651B1 (en) | Instruction translation method |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |