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

文档序号:8543550阅读:来源:国知局
程序烧录到其编译时指定地址的CPU物理存储器上,并将所述其他程序烧录到片外Flash上。其中,所述系统及驱动程序指的是引导程序、任务调度、定时功能、系统异常处理、中断管理、硬件设备驱动等执行效果会明显受代码执行时间影响的程序和实现本专利功能的程序段;所述其它程序指的是执行效果受代码执行时间影响不明显的程序,一般包括纯软件逻辑的中间层代码、应用软件等。
[0015]在设备上电启动后的第一阶段,所述启动程序2先依次初始化系统和设备驱动、初始化FPB组件以及软件全局变量这些基本运行环境,然后启动程序提取出后续程序的第一条指令代码的Flash执行地址,送入所述FPB关联程序3进行FPB关联处理。
[0016]所述FPB关联程序3能被所述启动程序2和所述执行程序4调用;所述FPB关联程序3传入地址皇数为本次需要关联执行的第一条指令代码的Flash执行地址,所述FPB关联程序3将顺序执行“加载被执行代码并对其进行FPB关联的过程”和“加载预判为即将被执行的代码段的过程”两个过程。其中,“加载被执行代码并对其进行FPB关联的过程”为必选过程,“加载预判为即将被执行的代码段的过程”可根据CPU的配置选配,即若CPU具备DMA功能,则所述FPB关联程序在执行“加载被执行代码并对其进行FPB关联的过程”之后还执行“加载预判为即将被执行的代码段的过程”。
[0017]所述“加载被执行代码并对其进行FPB关联的过程”在得到调用者传入的代码的Flash执行地址后,检查对应地址的代码是否已经被加载到RAM缓冲中,如果代码未被加载到RAM缓冲中,则通过Flash驱动程序从片外的Flash中将对应代码载入RAM缓冲中,加载完成后,该过程计算出程序指令地址对应的代码在RAM中的存储地址,设FPB组件一共有η个单元可供使用,每个单元关联m个字节的Flash地址空间,该RAM缓冲的大小定义为k字节,则k字节应该至少等于n*m字节,通过设置FPB,将该地址开始n*m字节的RAM地址与代码的Flash执行地址实现关联;
[0018]该“加载预判为即将被执行的代码段的过程”开辟一片与所述“加载被执行代码并对其进行FPB关联的过程”的RAM缓冲大小k字节相等的RAM空间作为辅助RAM缓冲,然后将片外的Flash上紧随所述“加载被执行代码并对其进行FPB关联的过程”所加载的代码之后的k字节代码加载到辅助RAM缓冲中,该加载过程通过DMA实现;且该“加载预判为即将被执行的代码段的过程”执行的结果用于加速下一次“加载被执行代码并对其进行FPB关联的过程”。
[0019]所述执行程序4在所述FPB关联程序3之后被调用,所述执行程序4的传入地址参数和所述FPB关联程序3传入的地址参数相同,所述执行程序4将传入的地址参数送入CPU的PC寄存器,然后CPU将自动完成后续的代码执行过程;
[0020]所述总线异常处理程序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进行重关联处理。
[0021]虽然以上描述了本发明的【具体实施方式】,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
【主权项】
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组件一共有η个单元可供使用,每个单元关联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架构下可执行代码的存储方法,由编译和烧录程序、启动程序、FPB关联程序、执行程序以及总线异常处理程序五个逻辑单元参与,通过FPB关联程序将一片RAM空间关联到一处未和物理Flash关联的地址上,将其作为存储了可执行代码的存储空间,供CPU内核获取和执行机器指令使用。同时该RAM空间可以动态被更新为新值,且可以被FPB重新设置关联到新的Flash地址上。这样,本发明方法仅使用一小片片内的Flash存储FPB管理代码,就可以利用不大的RAM空间和廉价的片外Flash,将CPU的可执行代码的存储空间扩大到512MB。
【IPC分类】G06F12-02, G06F9-445
【公开号】CN104866345
【申请号】CN201510262282
【发明人】林志伟, 黄健
【申请人】福建升腾资讯有限公司
【公开日】2015年8月26日
【申请日】2015年5月21日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1