堆栈区域扩充的方法、装置及硬件平台制造方法及图纸

技术编号:28033680 阅读:16 留言:0更新日期:2021-04-09 23:15
本发明专利技术提供一种堆栈区域扩充的方法、装置、硬件平台、电子设备及可读存储介质,能够在高速RAM资源有限的情况下将堆栈区域扩充到低速RAM,解决开发人员因堆栈受限而无法开发复杂应用的问题。方法包括:S1、获取可用做堆栈的至少一个资源块,至少一个资源块中的每个资源块作为一个堆栈区域使用,从而提供多个堆栈区域;S2、将多个堆栈区域排序;S3、按序使用多个堆栈区域,使用过程之中,如果当前使用的第一堆栈区域上溢,则切换到第一堆栈区域的下一堆栈区域,如果当前使用的堆栈区域下溢,则切换到第一堆栈区域的上一堆栈区域。

【技术实现步骤摘要】
堆栈区域扩充的方法、装置及硬件平台
本专利技术涉及计算机
,尤其涉及一种堆栈区域扩充的方法、装置及硬件平台、电子设备和可读存储介质。
技术介绍
随着物联网,移动互联网,云计算等产业的不断发展与增长,其依赖的半导体产业也取得长足发展,芯片作为核心变得越来越重要。目前针对不同的应用方向与场景,出现了许多专用芯片和通用芯片,有的为低功耗,有的为低成本,有的为高性能等等,这就导致出现许多种类的资源受限的芯片(包括但不限于MCU,MPU等),在这些芯片中高速的RAM(比如SRAM)作为一种成本较高的资源,往往数量较少,而速度相对较低的RAM(比如DRAM)成本往往也较低,因此提供的数量相对多一点。在芯片应用中,堆栈(stack)是个特殊的存储区,属于RAM空间的一部分,主要用于函数活动记录,比如保存函数调用时的参数、返回地址及特殊寄存器等,同时也为函数的局部变量分配存储空间。另外,中断切换时保存和恢复现场(与函数类似)。堆栈具有先进后出的特性,根据平台的不同,与堆栈相关的寄存器数量会有不同。在具有堆栈功能的硬件平台中,一般至少有一个堆栈指针寄存器(SP),用于指向堆栈的栈顶地址。由于堆栈频繁使用,因此为了提升性能,往往会使用速度最快的RAM,而且目前的堆栈区域都是连续的,这就导致堆栈区域往往很小,非常容易出现堆栈溢出的情况,不易写出复杂的应用,并且出现错误不易排查,给开发人员的开发增加了困难,严重影响开发效率。
技术实现思路
本专利技术提供一种堆栈区域扩充的方法、装置、硬件平台、电子设备及可读存储介质,能够在高速RAM资源有限的情况下将堆栈区域扩充到低速RAM,解决开发人员因堆栈受限而无法开发复杂应用的问题。第一方面,本专利技术提供一种堆栈区域扩充的方法,包括:S1、获取可用做堆栈的至少一个资源块,所述至少一个资源块中的每个资源块作为一个堆栈区域使用,从而提供多个堆栈区域;S2、将所述多个堆栈区域排序;S3、按序使用所述多个堆栈区域,使用过程之中,如果当前使用的第一堆栈区域上溢,则切换到所述第一堆栈区域的下一堆栈区域,如果当前使用的堆栈区域下溢,则切换到所述第一堆栈区域的上一堆栈区域。可选地,所述资源块包括多个离散RAM区域中的一个或多个。可选地,步骤S1之前还包括:根据系统资源,划分可用作堆栈的至少一个资源块。可选地,步骤S2中按照所述多个堆栈区域对应的资源块的存取速度从高到低进行排序;或者,按照所述多个堆栈区域对应的资源块的存取速度并结合所述资源块的大小进行排序。可选地,步骤S2还包括:将完成排序的所述多个堆栈区域的操作管理信息存入数据结构;所述操作管理信息包括所述多个堆栈区域的排列顺序信息,以及每个堆栈区域的地址、大小及当该堆栈区域作为当前使用的堆栈区域工作时溢出后需要备份的寄存器及其大小,所述溢出包括上溢和下溢;步骤S3中根据所述操作管理信息按序使用所述多个堆栈区域。可选地,所述数据结构包括数组,所述数组中各元素的顺序与所述多个堆栈区域的排列顺序一致,所述数组中的每个元素包含的信息包括:与所述元素对应的所述堆栈区域的地址、大小以及当所述堆栈区域溢出后需要备份的各寄存器及其大小。可选地,所述堆栈区域溢出后需要备份的各寄存器设置于对应的堆栈区域的尾部,所述堆栈溢出后需要备份的各寄存器包括:堆栈指针寄存器SP,堆栈计数寄存器CNT,堆栈大小寄存器SZ;步骤S3包括:S31、程序初始化时,初始化所述数组的索引,使其指向所述数组的开始元素;根据所述索引从所述数组中取出一个元素,然后根据该元素包含的信息设置所述堆栈指针寄存器SP的值、所述堆栈大小寄存器SZ的值、所述堆栈计数寄存器CNT的值,并使所述堆栈区域能够在溢出时产生中断;循环执行下述步骤,直至程序结束:S32、程序执行过程中,如果遇到需要操作所述堆栈指针寄存器SP来保留堆栈区域的指令或操作时,在修改所述堆栈指针寄存器SP的值之前,使所述堆栈计数寄存器CNT增加与所述指令或操作相应的计数;如果遇到需要操作所述堆栈指针寄存器SP来释放堆栈区域的指令或操作时,在修改所述堆栈指针寄存器SP的值之前,使所述堆栈计数寄存器CNT减去与所述指令或操作相应的计数;S33、当所述堆栈计数寄存器CNT的值大于等于所述堆栈大小寄存器SZ的值,或者所述堆栈计数寄存器CNT的值小于0时,均触发中断,进入中断处理函数,并将所述堆栈计数寄存器CNT的值回退到修改之前,并将标志寄存器的堆栈标志位置至0或1;S34、所述中断处理函数根据所述标志寄存器的堆栈标志位判断为下溢还是上溢;如果为下溢,则进行下溢处理,如果为上溢,则进行上溢处理。可选地,所述进行上溢处理的步骤包括:S340、将所述中断函数返回地址出栈放入对应的寄存器中;S341、根据所述数组的索引从所述数组中取出当前元素,根据该当前元素的信息备份当前堆栈区域溢出后需要备份的各寄存器;S342、将所述数组的索引自增1,按自增后的索引从所述数组中取出对应的元素,并根据该元素的信息重新设置所述堆栈指针寄存器SP的值、所述堆栈大小寄存器SZ的值、所述堆栈计数寄存器CNT的值;S343、将所述中断函数返回地址压入所述堆栈指针寄存器SP重新设置后指向的当前堆栈中,所述中断函数执行完毕并返回,重新执行堆栈相关指令;所述进行下溢处理的步骤包括:S344、将所述中断函数返回地址出栈放入对应的寄存器中;S345、将所述数组的索引自减1,按自减后的索引从所述数组中取出对应的元素,然后根据该元素包含的信息获取堆栈区域的地址和大小,得到备份的所述堆栈指针寄存器SP的值,还原所述堆栈指针寄存器SP的值;S346、从还原后的所述堆栈指针寄存器SP指向的当前堆栈中还原备份的所述堆栈计数寄存器CNT、所述堆栈大小寄存器SZ的值;S347、将所述中断函数返回值地址压入所述当前堆栈的栈顶,所述中断函数执行完毕并返回,重新执行堆栈相关指令。可选地,步骤S342和S345中,如果所述数组的索引在自增和自减的过程中超过所述堆栈区域的数量范围,通过软件触发异常,进行报错。第二方面,本专利技术提供一种用于堆栈区域扩充的装置,该装置包括:获取模块,用于获取可用做堆栈的至少一个资源块,所述至少一个资源块中的每个资源块作为一个堆栈区域使用,从而提供多个堆栈区域;排序模块,用于将所述多个堆栈区域排序;堆栈区域管理模块,用于按序使用所述多个堆栈区域,并在使用过程之中,如果当前使用的第一堆栈区域上溢,则切换到所述第一堆栈区域的下一堆栈区域,如果当前使用的堆栈区域下溢,则切换到所述第一堆栈区域的上一堆栈区域。第三方面,本专利技术提供一种硬件平台,所述硬件平台采用了上述堆栈区域扩充的方法。第四方面,本专利技术提供一种电子设备,包括存储器和处理器,所述存储器存储有堆栈区域扩充程序,所述堆栈区域扩充程序用于被所述处理器运行以执行上述堆栈区域扩充方法中的各步骤。第五方面,本本文档来自技高网...

【技术保护点】
1.一种堆栈区域扩充的方法,其特征在于,包括:/nS1、获取可用做堆栈的至少一个资源块,所述至少一个资源块中的每个资源块作为一个堆栈区域使用,从而提供多个堆栈区域;/nS2、将所述多个堆栈区域排序;/nS3、按序使用所述多个堆栈区域,使用过程之中,如果当前使用的第一堆栈区域上溢,则切换到所述第一堆栈区域的下一堆栈区域,如果当前使用的堆栈区域下溢,则切换到所述第一堆栈区域的上一堆栈区域。/n

【技术特征摘要】
1.一种堆栈区域扩充的方法,其特征在于,包括:
S1、获取可用做堆栈的至少一个资源块,所述至少一个资源块中的每个资源块作为一个堆栈区域使用,从而提供多个堆栈区域;
S2、将所述多个堆栈区域排序;
S3、按序使用所述多个堆栈区域,使用过程之中,如果当前使用的第一堆栈区域上溢,则切换到所述第一堆栈区域的下一堆栈区域,如果当前使用的堆栈区域下溢,则切换到所述第一堆栈区域的上一堆栈区域。


2.根据权利要求1所述的堆栈区域扩充的方法,其特征在于,所述资源块包括多个离散随机存取存储器RAM区域中的一个或多个。


3.根据权利要求1所述的堆栈区域扩充的方法,其特征在于,步骤S1之前还包括:根据系统资源,划分可用作堆栈的至少一个资源块。


4.根据权利要求1所述的堆栈区域扩充的方法,其特征在于,步骤S2中按照所述多个堆栈区域对应的资源块的存取速度从高到低进行排序;或者,按照所述多个堆栈区域对应的资源块的存取速度并结合所述资源块的大小进行排序。


5.根据权利要求1-4任一项所述的堆栈区域扩充的方法,其特征在于,步骤S2还包括:
将完成排序的所述多个堆栈区域的操作管理信息存入数据结构;所述操作管理信息包括所述多个堆栈区域的排列顺序信息,以及每个堆栈区域的地址、大小及当该堆栈区域作为当前使用的堆栈区域工作时溢出后需要备份的寄存器及其大小,所述溢出包括上溢和下溢;
步骤S3中根据所述操作管理信息按序使用所述多个堆栈区域。


6.根据权利要求5所述的堆栈区域扩充的方法,其特征在于,所述数据结构包括数组,所述数组中各元素的顺序与所述多个堆栈区域的排列顺序一致,所述数组中的每个元素包含的信息包括:与所述元素对应的所述堆栈区域的地址、大小以及当所述堆栈区域溢出后需要备份的各寄存器及其大小。


7.根据权利要求6所述的堆栈区域扩充的方法,其特征在于,所述堆栈区域溢出后需要备份的各寄存器设置于对应的堆栈区域的顶部,所述堆栈溢出后需要备份的各寄存器包括:堆栈指针寄存器SP,堆栈计数寄存器CNT,堆栈大小寄存器SZ;步骤S3包括:
S31、程序初始化时,初始化所述数组的索引,使其指向所述数组的开始元素;根据所述索引从所述数组中取出一个元素,然后根据该元素包含的信息设置所述堆栈指针寄存器SP的值、所述堆栈大小寄存器SZ的值、所述堆栈计数寄存器CNT的值,并使所述堆栈区域能够在溢出时产生中断;循环执行下述步骤S32-S34,直至程序结束。
S32、程序执行过程中,如果遇到需要操作所述堆栈指针寄存器SP来保留堆栈区域的指令或操作时,在修改所述堆栈指针寄存器SP的值之前,使所述堆栈计数寄存器CNT增加与所述指令或操作相应的计数;如果遇到需要操作所述堆栈指针寄存器SP来释放堆栈区域的指令或操作时,在修改所述堆栈指针寄存器SP的值之前,使所述堆栈计数寄存器CNT减去与所述指令或操作相应的计数;
S33、当所述堆栈计数寄存器CNT的值大于等于所述堆栈大小寄存器S...

【专利技术属性】
技术研发人员:喻安雄
申请(专利权)人:海光信息技术股份有限公司
类型:发明
国别省市:天津;12

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

1