一种ARMV7M架构下可执行代码的存储方法.pdf

上传人:GAME****980 文档编号:1752258 上传时间:2018-07-09 格式:PDF 页数:7 大小:462.04KB
返回 下载 相关 举报
摘要
申请专利号:

CN201510262282.7

申请日:

2015.05.21

公开号:

CN104866345A

公开日:

2015.08.26

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 9/445申请日:20150521|||公开

IPC分类号:

G06F9/445; G06F12/02

主分类号:

G06F9/445

申请人:

福建升腾资讯有限公司

发明人:

林志伟; 黄健

地址:

350000福建省福州市仓山区金山工业区金山大道618号21#、22#、55#

优先权:

专利代理机构:

福州市鼓楼区京华专利事务所(普通合伙)35212

代理人:

宋连梅

PDF下载: PDF下载
内容摘要

本发明提供一种ARMv7m架构下可执行代码的存储方法,由编译和烧录程序、启动程序、FPB关联程序、执行程序以及总线异常处理程序五个逻辑单元参与,通过FPB关联程序将一片RAM空间关联到一处未和物理Flash关联的地址上,将其作为存储了可执行代码的存储空间,供CPU内核获取和执行机器指令使用。同时该RAM空间可以动态被更新为新值,且可以被FPB重新设置关联到新的Flash地址上。这样,本发明方法仅使用一小片片内的Flash存储FPB管理代码,就可以利用不大的RAM空间和廉价的片外Flash,将CPU的可执行代码的存储空间扩大到512MB。

权利要求书

权利要求书
1.  一种ARMv7m架构下可执行代码的存储方法,其特征在于:
在编译和烧录程序中,通过编译器的参数配置,将启动程序、FPB关联程序、执行程序、总线异常处理程序和系统及驱动程序定位于CPU片内物理存储器关联的Flash地址空间上,而将其他程序定位于CPU没有物理存储器关联的Flash地址空间上;编译生成目标可执行代码的二进制镜像文件;然后,软件开发人员将该启动程序、FPB关联程序、执行程序、总线异常处理程序和系统及驱动程序烧录到其编译时指定地址的CPU物理存储器上,并将所述其他程序烧录到片外Flash上;
在设备上电启动后的第一阶段,所述启动程序先依次初始化系统和设备驱动、初始化FPB组件以及软件全局变量这些基本运行环境,然后启动程序提取出后续程序的第一条指令代码的Flash执行地址,送入所述FPB关联程序进行FPB关联处理,所述FPB关联程序能被所述启动程序和所述执行程序调用;
所述FPB关联程序传入地址参数为本次需要关联执行的第一条指令代码的Flash执行地址,执行“加载被执行代码并对其进行FPB关联的过程”;在得到调用者传入的代码的Flash执行地址后,检查对应地址的代码是否已经被加载到RAM缓冲中,如果代码未被加载到RAM缓冲中,则通过Flash驱动程序从片外的Flash中将对应代码载入RAM缓冲中,加载完成后,计算出程序指令地址对应的代码在RAM中的存储地址,设FPB组件一共有n个单元可供使用,每个单元关联m个字节的Flash地址空间,该RAM缓冲的大小定义为k字节,则k字节应该至少等于n*m字节,通过设置FPB,将该地址开始n*m字节的RAM地址与代码的Flash执行地址实现关联;
所述执行程序在所述FPB关联程序之后被调用,所述执行程序的传入地址参数和所述FPB关联程序传入的地址参数相同,所述执行程序将传入的地址参数送入CPU的PC寄存器,然后CPU将自动完成后续的代码执行过程;
当所述执行程序执行过程引发总线异常时,所述总线异常处理程序被调用执行,通过查询CPU的异常状态寄存器,从而获知异常是由CPU取指令引发还是由CPU数据访问引发,若异常由CPU取指令引发,则将异常地址作为参数调用所述FPB关联程序进行重关联处理,若异常由CPU数据访问引发,则所述总线异常处理程序继续检查引发异常的指令是否为LDM多寄存器加载指令,若是,则由所述总线异常处理程序代替CPU完成LDM指令的功能,然后返回下一条指令代码地址让CPU继续执行,若不是,则将要访问的数据地址为参数调用所述FPB关联程序进行重关联处理。

2.  根据权利要求1所述的一种ARMv7m架构下可执行代码的存储方法,其特征在于:若CPU具备DMA功能,则所述FPB关联程序在执行所述“加载被执行代码并对其进行FPB关联的过程”之后还执行“加载预判为即将被执行的代码段的过程”,该“加载预判为即将被执行的代码段的过程”开辟一片与所述“加载被执行代码并对其进行FPB关联的过程”的RAM缓冲大小k字节相等的RAM空间作为辅助RAM缓冲,然后将片外的Flash上紧随所述“加载被执行代码并对其进行FPB关联的过程”所加载的代码之后的k字节代码加载到辅助RAM缓冲中,该加载过程通过DMA实现;且该“加载预判为即将被执行的代码段的过程”执行的结果用于加速下一次“加载被执行代码并对其进行FPB关联的过程”。

说明书

说明书一种ARMv7m架构下可执行代码的存储方法
技术领域
本发明涉及一种ARMv7m架构下可执行代码的存储方法,特别涉及一种在ARMv7m架构下将可执行代码存储于片外无XIP的Flash上的方法。
背景技术
在计算机系统中,CPU需要先提取到机器指令、然后译码、最后才能执行机器指令。机器指令需要存储在CPU可直接寻址的存储器上,才能被CPU提取出来。CPU可直接寻址的存储器一般是片内RAM、片外并行总线的RAM、或者并行总线的支持XIP(片上执行)功能的Flash存储器。这样的存储器的单位存储空间价格都比较高,所以嵌入式MCU上一般不会配置大容量的可供存储执行代码的存储器。这使得嵌入式MCU上可提供的软件功能受到限制。如果通过外扩并行总线的存储器来扩展存储执行代码的空间,则会占用CPU的PIN脚资源,使可用IO资源变少。目前市面上有一种带有XIP功能的SPI总线的Flash,在特定的支持SPI XIP Flash的CPU上可以用来存储执行代码。但这使得产品方案的选型受限于特定的Flash和CPU器件。
ARM v7m是ARM公司发布第7版MCU内核架构。这种架构下,又因为CPU选配件的差异,衍生出Cortex-M3、Cortex-M4等子型号。基于这种架构的MCU其芯片效能相对与之前的ARM9/ARM11等处理器有明显提高,在工业控制、通讯设备、智能外设等领域有着广泛的应用。然而,ARM v7m架构的MCU,受上述提到的可直接存储可执行代码的空间大小的限制,难以被应用于复杂应用场景的设备中。这使得复杂应用场景的设备不得不使用芯片效能低的ARM9/ARM11处理器,或者ARM v7r、ARM v7a等高成本的处理器,进而影响到产品的性价。
而ARM v7m架构中存在一个CPU选配组件,称为FPB(Flash补丁及 断点模块),该组件一般用于在ARM v7m架构的处理器中实现在线调试功能。虽然FPB是选配组件,但目前大部分的ARM v7m的MCU实现都带有FPB组件。FPB的运行机制是临时性接管CPU内核对某些地址的Flash存储器的访问,将对应地址上的Flash内容替换成断点代码或者指定的RAM中存储的指令代码返回给CPU内核,让CPU内核因为执行到断点指令而停止运行,或执行被替换过的目标指令代码。ARM v7m架构中同时约定,0x00000000~0x1FFFFFFF地址的512MB空间为可存储执行代码的Flash空间。即使CPU上仅具备16KB的Flash空间,0x4000~0x1FFFFFFF的地址空间仍然被CPU内核作为Flash地址空间处理对待,且FPB同样可以在这片没有实际关联物理Flash的地址上生效,也就是说,可以通过FPB将一片RAM空间关联到一处未和物理Flash关联的地址上,将其作为存储了可执行代码的存储空间,供CPU内核获取和执行机器指令使用;同时,这片RAM空间可以动态被更新为新的值,且可以被FPB重新设置关联到新的Flash地址上。RAM上的执行代码不被使用时,还可以存放于片外的无XIP功能的SPI Nor Flash上或者Nand Flash上,对存储设备无太大的要求。
因此,若能使用一小片片内的Flash存储FPB管理代码,就可以利用不大的RAM空间和廉价的片外Flash,将CPU的可执行代码的存储空间扩大到512MB。有鉴于此,本发明人特潜心研究该思想的实现方法而才有本发明问世。
发明内容
本发明要解决的技术问题,在于提供一种ARMv7m架构下可执行代码的存储方法,消耗内存小、不依赖于特定的Flash器件,可将程序代码的执行空间扩大到512MB。
本发明是这样实现的:一种ARMv7m架构下可执行代码的存储方法,在编译和烧录程序中,通过编译器的参数配置,将启动程序、FPB关联程序、执行程序、总线异常处理程序和系统及驱动程序定位于CPU片内物理存储器关联的Flash地址空间上,而将其他程序定位于CPU没有物理存储器关联 的Flash地址空间上;编译生成目标可执行代码的二进制镜像文件;然后,软件开发人员将该启动程序、FPB关联程序、执行程序、总线异常处理程序和系统及驱动程序烧录到其编译时指定地址的CPU物理存储器上,并将所述其他程序烧录到片外Flash上;在设备上电启动后的第一阶段,所述启动程序先依次初始化系统和设备驱动、初始化FPB组件以及软件全局变量这些基本运行环境,然后启动程序提取出后续程序的第一条指令代码的Flash执行地址,送入所述FPB关联程序进行FPB关联处理,所述FPB关联程序能被所述启动程序和所述执行程序调用;所述FPB关联程序传入地址参数为本次需要关联执行的第一条指令代码的Flash执行地址,执行“加载被执行代码并对其进行FPB关联的过程”;在得到调用者传入的代码的Flash执行地址后,检查对应地址的代码是否已经被加载到RAM缓冲中,如果代码未被加载到RAM缓冲中,则通过Flash驱动程序从片外的Flash中将对应代码载入RAM缓冲中,加载完成后,计算出程序指令地址对应的代码在RAM中的存储地址,设FPB组件一共有n个单元可供使用,每个单元关联m个字节的Flash地址空间,该RAM缓冲的大小定义为k字节,则k字节应该至少等于n*m字节,通过设置FPB,将该地址开始n*m字节的RAM地址与代码的Flash执行地址实现关联;所述执行程序在所述FPB关联程序之后被调用,所述执行程序的传入地址参数和所述FPB关联程序传入的地址参数相同,所述执行程序将传入的地址参数送入CPU的PC寄存器,然后CPU将自动完成后续的代码执行过程;当所述执行程序执行过程引发总线异常时,所述总线异常处理程序被调用执行,通过查询CPU的异常状态寄存器,从而获知异常是由CPU取指令引发还是由CPU数据访问引发,若异常由CPU取指令引发,则将异常地址作为参数调用所述FPB关联程序进行重关联处理,若异常由CPU数据访问引发,则所述总线异常处理程序继续检查引发异常的指令是否为LDM多寄存器加载指令,若是,则由所述总线异常处理程序代替CPU完成LDM指令的功能,然后返回下一条指令代码地址让CPU继续执行,若不是,则将要访问的数据地址为参数调用所述FPB关联程序进行重关联处理。
进一步的,若CPU具备DMA功能,则所述FPB关联程序在执行所述“加载被执行代码并对其进行FPB关联的过程”之后还执行“加载预判为即将被执行的代码段的过程”,该“加载预判为即将被执行的代码段的过程”开辟一片与所述“加载被执行代码并对其进行FPB关联的过程”的RAM缓冲大小k字节相等的RAM空间作为辅助RAM缓冲,然后将片外的Flash上紧随所述“加载被执行代码并对其进行FPB关联的过程”所加载的代码之后的k字节代码加载到辅助RAM缓冲中,该加载过程通过DMA实现;且该“加载预判为即将被执行的代码段的过程”执行的结果用于加速下一次“加载被执行代码并对其进行FPB关联的过程”。
本发明具有如下优点:
本发明提供了一种在常见的ARM v7m处理器上可以实现的将执行代码存储与片外廉价存储器上的方法,该方法可将程序代码的执行空间扩大到512MB,消耗内存小、不依赖于特定的Flash器件,实现代价小、实现收益明显,且有利于将复杂的应用场景实现在基于ARM v7m的MCU上,扩大ARM v7m的MCU的应用场景,并降低对应产品的成本。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明方法执行流程图。
具体实施方式
如图1所示,本发明方法主要由五个逻辑单元参与,分别是:编译和烧录程序1、启动程序2、FPB关联程序3、执行程序4以及总线异常处理程序5。这五个逻辑单元在整体过程中的配合关系如图1所示。所述启动程序2、FPB关联程序3、执行程序4以及总线异常处理程序5这四个逻辑单元的软件实现均存储于CPU原生支持的代码存储器中,例如存储于片内的Flash或ROM中。
在所述编译和烧录程序1中,通过编译器的参数配置,将启动程序2、FPB关联程序3、执行程序4、总线异常处理程序5和系统及驱动程序定位 于CPU片内物理存储器关联的Flash地址空间上,而将其他程序定位于CPU没有物理存储器关联的Flash地址空间上;编译生成目标可执行代码的二进制镜像文件;然后,软件开发人员将该启动程序2、FPB关联程序3、执行程序4、总线异常处理程序5和系统及驱动程序烧录到其编译时指定地址的CPU物理存储器上,并将所述其他程序烧录到片外Flash上。其中,所述系统及驱动程序指的是引导程序、任务调度、定时功能、系统异常处理、中断管理、硬件设备驱动等执行效果会明显受代码执行时间影响的程序和实现本专利功能的程序段;所述其它程序指的是执行效果受代码执行时间影响不明显的程序,一般包括纯软件逻辑的中间层代码、应用软件等。
在设备上电启动后的第一阶段,所述启动程序2先依次初始化系统和设备驱动、初始化FPB组件以及软件全局变量这些基本运行环境,然后启动程序提取出后续程序的第一条指令代码的Flash执行地址,送入所述FPB关联程序3进行FPB关联处理。
所述FPB关联程序3能被所述启动程序2和所述执行程序4调用;所述FPB关联程序3传入地址参数为本次需要关联执行的第一条指令代码的Flash执行地址,所述FPB关联程序3将顺序执行“加载被执行代码并对其进行FPB关联的过程”和“加载预判为即将被执行的代码段的过程”两个过程。其中,“加载被执行代码并对其进行FPB关联的过程”为必选过程,“加载预判为即将被执行的代码段的过程”可根据CPU的配置选配,即若CPU具备DMA功能,则所述FPB关联程序在执行“加载被执行代码并对其进行FPB关联的过程”之后还执行“加载预判为即将被执行的代码段的过程”。
所述“加载被执行代码并对其进行FPB关联的过程”在得到调用者传入的代码的Flash执行地址后,检查对应地址的代码是否已经被加载到RAM缓冲中,如果代码未被加载到RAM缓冲中,则通过Flash驱动程序从片外的Flash中将对应代码载入RAM缓冲中,加载完成后,该过程计算出程序指令地址对应的代码在RAM中的存储地址,设FPB组件一共有n个单元可供使用,每个单元关联m个字节的Flash地址空间,该RAM缓冲的大小定 义为k字节,则k字节应该至少等于n*m字节,通过设置FPB,将该地址开始n*m字节的RAM地址与代码的Flash执行地址实现关联;
该“加载预判为即将被执行的代码段的过程”开辟一片与所述“加载被执行代码并对其进行FPB关联的过程”的RAM缓冲大小k字节相等的RAM空间作为辅助RAM缓冲,然后将片外的Flash上紧随所述“加载被执行代码并对其进行FPB关联的过程”所加载的代码之后的k字节代码加载到辅助RAM缓冲中,该加载过程通过DMA实现;且该“加载预判为即将被执行的代码段的过程”执行的结果用于加速下一次“加载被执行代码并对其进行FPB关联的过程”。
所述执行程序4在所述FPB关联程序3之后被调用,所述执行程序4的传入地址参数和所述FPB关联程序3传入的地址参数相同,所述执行程序4将传入的地址参数送入CPU的PC寄存器,然后CPU将自动完成后续的代码执行过程;
所述总线异常处理程序5在所述执行程序4的过程中会被触发,在所述执行程序4执行时,如果代码执行到本次未被FPB指定关联的Flash地址且不属于物理Flash关联的地址时,会由于CPU内核无法提取到机器指令代码而引发一次总线异常,所述总线异常处理程序5在软件开发阶段就被关联到总线异常向量中,因此,异常发生时所述总线异常处理程序5被调用执行。在所述总线异常处理程序5被调用执行时,通过查询CPU的异常状态寄存器,从而获知异常是由CPU取指令引发还是由CPU数据访问引发,若异常由CPU取指令引发,则将异常地址作为参数调用所述FPB关联程序3进行重关联处理,若异常由CPU数据访问引发,则所述总线异常处理程序5继续检查引发异常的指令是否为LDM多寄存器加载指令,若是,则由所述总线异常处理程序5代替CPU完成LDM指令的功能,然后返回下一条指令代码地址让CPU继续执行,若不是,则将要访问的数据地址为参数调用所述FPB关联程序3进行重关联处理。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发 明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。

一种ARMV7M架构下可执行代码的存储方法.pdf_第1页
第1页 / 共7页
一种ARMV7M架构下可执行代码的存储方法.pdf_第2页
第2页 / 共7页
一种ARMV7M架构下可执行代码的存储方法.pdf_第3页
第3页 / 共7页
点击查看更多>>
资源描述

《一种ARMV7M架构下可执行代码的存储方法.pdf》由会员分享,可在线阅读,更多相关《一种ARMV7M架构下可执行代码的存储方法.pdf(7页珍藏版)》请在专利查询网上搜索。

本发明提供一种ARMv7m架构下可执行代码的存储方法,由编译和烧录程序、启动程序、FPB关联程序、执行程序以及总线异常处理程序五个逻辑单元参与,通过FPB关联程序将一片RAM空间关联到一处未和物理Flash关联的地址上,将其作为存储了可执行代码的存储空间,供CPU内核获取和执行机器指令使用。同时该RAM空间可以动态被更新为新值,且可以被FPB重新设置关联到新的Flash地址上。这样,本发明方法仅使。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1