[发明专利]一种堆栈容量的设置方法及系统在审
申请号: | 201510518787.5 | 申请日: | 2015-08-21 |
公开(公告)号: | CN105094991A | 公开(公告)日: | 2015-11-25 |
发明(设计)人: | 张阳 | 申请(专利权)人: | 北京经纬恒润科技有限公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50 |
代理公司: | 北京集佳知识产权代理有限公司 11227 | 代理人: | 王宝筠 |
地址: | 100101 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 堆栈 容量 设置 方法 系统 | ||
技术领域
本发明涉及操作系统技术领域,更具体地说,涉及一种堆栈容量的设置方法及系统。
背景技术
随着嵌入式软硬件技术的飞速发展,嵌入式系统已经被广泛应用到各种科技领域,如自动控制、机械工程、交通工具、仪器仪表、航空航天等。并且,由于各个领域对于嵌入式系统的性能要求越来越高,嵌入式实时操作系统应运而生。
嵌入式实时操作系统中的任务在执行时需要使用硬件芯片的RAM(RandomAccessMemory,随机存取存储器)空间的一部分,用于保存任务执行过程中需要存储的临时数据、以及发生任务切换时需要存储的硬件芯片通用寄存器数据,这部分RAM空间被称为“任务堆栈”,“任务堆栈”所占用的这部分RAM空间的大小被称为“任务堆栈”的“堆栈容量”。
嵌入式实时操作系统中,需要软件开发人员预先设置任务堆栈的堆栈容量,当堆栈容量设置过小,而任务实际使用的RAM空间超过预先设置的堆栈容量时,将发生堆栈溢出现象,堆栈溢出会使任务的执行出现异常甚至导致系统崩溃。因此,为了保障任务和系统的正常运行,在设置堆栈容量时,通常先将堆栈容量设置为一个预估值,在任务执行过程中,如果由于该预估值过小而发生堆栈溢出,则需要在该预估值的基础上适当调大任务堆栈的堆栈容量,从而避免再发生堆栈溢出现象。
当堆栈容量设置过大时,并不会发生堆栈溢出,但过大的堆栈容量会占用过多的RAM空间,过于浪费有限的RAM资源,而现有技术却只能在检测到堆栈溢出时调大堆栈容量,无法在不发生堆栈溢出时设置合适的能够避免RAM资源过于浪费的堆栈容量。
发明内容
有鉴于此,本发明提供一种堆栈容量的设置方法及系统,以便在不发生堆栈溢出时设置合适的能够避免RAM资源过于浪费的堆栈容量。
为实现上述目的,本发明提供了如下技术方案:
一种堆栈容量的设置方法,包括:
为第一任务分配第一任务堆栈;所述第一任务堆栈为执行所述第一任务时使用的随机存取存储器RAM空间;
在执行所述第一任务的过程中,检测所述第一任务堆栈是否发生堆栈溢出,并在所述第一任务堆栈没有发生堆栈溢出时,检测所述第一任务对于所述第一任务堆栈的第一实际使用量;
以所述第一任务对于所述第一任务堆栈的第一实际使用量为基准,设置所述第一任务堆栈的第一堆栈容量;所述第一堆栈容量大于或等于所述第一任务对于所述第一任务堆栈的第一实际使用量。
优选地,所述检测所述第一任务对于所述第一任务堆栈的第一实际使用量,包括:
检测所述第一任务堆栈中的标识数据,并输出检测结果,根据所述检测结果计算所述第一任务对于所述第一任务堆栈的第一实际使用量;
其中,所述标识数据是预先在所述第一任务堆栈的每个存储单元中写入的标识;所述标识数据用于表征所述存储单元未被使用,且在所述存储单元被使用后消失。
优选地,所述检测所述第一任务堆栈中的标识数据,并输出检测结果,根据所述检测结果计算所述第一任务对于所述第一任务堆栈的第一实际使用量,包括:
按照第一检测顺序依次检测所述第一任务堆栈的存储单元中的所述标识数据,直到检测不到所述标识数据时,输出从所述第一任务堆栈中检测到的所述标识数据的标识数量;所述第一检测顺序为从所述第一任务堆栈的栈顶地址到所述第一任务堆栈的起始地址的检测顺序;
计算所述第一任务堆栈的存储单元的总量与所述标识数量的差值,并将所述差值作为所述第一任务对于所述第一任务堆栈的第一实际使用量。
优选地,所述检测所述第一任务堆栈中的标识数据,并输出检测结果,根据所述检测结果计算所述第一任务对于所述第一任务堆栈的第一实际使用量,包括:
按照第二检测顺序依次检测所述第一任务堆栈的存储单元中的所述标识数据,直到检测到所述标识数据时,输出从所述第一任务堆栈中检测到的不带有所述标识数据的存储单元的单元数量;所述第二检测顺序为从所述第一任务堆栈的起始地址到所述第一任务堆栈的栈顶地址的检测顺序;
将所述单元数量作为所述第一任务对于所述第一任务堆栈的第一实际使用量。
优选地,还包括:
在所述第一任务堆栈发生堆栈溢出时,增大所述第一任务堆栈占用的RAM空间,并继续检测所述第一任务堆栈是否还会发生堆栈溢出,如果所述第一任务堆栈还会发生堆栈溢出则继续增大所述第一任务堆栈占用的RAM空间,直到所述第一任务堆栈不再发生堆栈溢出时,检测所述第一任务对于所述第一任务堆栈的第二实际使用量;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京经纬恒润科技有限公司,未经北京经纬恒润科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510518787.5/2.html,转载请声明来源钻瓜专利网。