一种ARMv7m架构下可执行代码的存储方法技术

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

【技术实现步骤摘要】

本专利技术涉及,特别涉及一种在ARMv7m架构下将可执行代码存储于片外无XIP的Flash上的方法。
技术介绍
在计算机系统中,CPU需要先提取到机器指令、然后译码、最后才能执行机器指令。机器指令需要存储在CPU可直接寻址的存储器上,才能被CPU提取出来。CPU可直接寻址的存储器一般是片内RAM、片外并行总线的RAM、或者并行总线的支持XIP (片上执行)功能的Flash存储器。这样的存储器的单位存储空间价格都比较高,所以嵌入式MCU上一般不会配置大容量的可供存储执行代码的存储器。这使得嵌入式MCU上可提供的软件功能受到限制。如果通过外扩并行总线的存储器来扩展存储执行代码的空间,则会占用CPU的PIN脚资源,使可用1资源变少。目前市面上有一种带有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?OxlFFFFFFF地址的512MB空间为可存储执行代码的Flash空间。即使CPU上仅具备16KB的Flash空间,0x4000?OxlFFFFFFF的地址空间仍然被CPU内核作为Flash地址空间处理对待,且FPB同样可以在这片没有实际关联物理Flash的地址上生效,也就是说,可以通过FPB将一片RAM空间关联到一处未和物理Flash关联的地址上,将其作为存储了可执行代码的存储空间,供CPU内核获取和执行机器指令使用;同时,这片RAM空间可以动态被更新为新的值,且可以被FPB重新设置关联到新的Flash地址上。RAM上的执行代码不被使用时,还可以存放于片外的无XIP功能的SPI Nor Flash上或者Nand Flash上,对存储设备无太大的要求。因此,若能使用一小片片内的Flash存储FPB管理代码,就可以利用不大的RAM空间和廉价的片外Flash,将CPU的可执行代码的存储空间扩大到512MB。有鉴于此,本专利技术人特潜心研宄该思想的实现方法而才有本专利技术问世。
技术实现思路
本专利技术要解决的技术问题,在于提供,消耗内存小、不依赖于特定的Flash器件,可将程序代码的执行空间扩大到512MB。本专利技术是这样实现的:,在编译和烧录程序中,通过编译器的参数配置,将启动程序、FPB关联程序、执行程序、总线异常处理程序和系统及驱动程序定位于CPU片内物理存储器关联的Flash地址空间上,而将其他程序定位于CPU没有物理存储器关联的Flash地址空间上;编译生成目标可执行代码的二进制镜像文件;然后,软件开发人员将该启动程序、FPB关联程序、执行程序、总线异常处理程序和系统及驱动程序烧录到其编译时指定地址的CPU物理存储器上,并将所述其他程序烧录到片外Flash上;在设备上电启动后的第一阶段,所述启动程序先依次初始化系统和设备驱动、初始化FPB组件以及软件全局变量这些基本运行环境,然后启动程序提取出后续程序的第一条指令代码的Flash执行地址,送入所述FPB关联程序进行FPB关联处理,所述FPB关联程序能被所述启动程序和所述执行程序调用;所述FPB关联程序传入地址皇数为本次需要关联执行的第一条指令代码的Flash执行地址,执行“加载被执行代码并对其进行FPB关联的过程”;在得到调用者传入的代码的Flash执行地址后,检查对应地址的代码是否已经被加载到RAM缓冲中,如果代码未被加载到RAM缓冲中,则通过Flash驱动程序从片外的Flash中将对应代码载入RAM缓冲中,加载完成后,计算出程序指令地址对应的代码在RAM中的存储地址,设FPB组件一共有η个单元可供使用,每个单元关联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为本专利技术方法执本文档来自技高网
...
一种<a href="http://www.xjishu.com/zhuanli/55/CN104866345.html" title="一种ARMv7m架构下可执行代码的存储方法原文来自X技术">ARMv7m架构下可执行代码的存储方法</a>

【技术保护点】
一种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关联程序进行重关联处理。...

【技术特征摘要】

【专利技术属性】
技术研发人员:林志伟黄健
申请(专利权)人:福建升腾资讯有限公司
类型:发明
国别省市:福建;35

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

1