CN105094991A - 一种堆栈容量的设置方法及系统 - Google Patents
一种堆栈容量的设置方法及系统 Download PDFInfo
- Publication number
- CN105094991A CN105094991A CN201510518787.5A CN201510518787A CN105094991A CN 105094991 A CN105094991 A CN 105094991A CN 201510518787 A CN201510518787 A CN 201510518787A CN 105094991 A CN105094991 A CN 105094991A
- Authority
- CN
- China
- Prior art keywords
- task
- storehouse
- task storehouse
- stack
- actual use
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明实施例公开了一种堆栈容量的设置方法,为第一任务分配第一任务堆栈;第一任务堆栈为执行第一任务时使用的随机存取存储器RAM空间;在执行第一任务的过程中,检测第一任务堆栈是否发生堆栈溢出,并在第一任务堆栈没有发生堆栈溢出时,检测第一任务对于第一任务堆栈的第一实际使用量;以第一任务对于第一任务堆栈的第一实际使用量为基准,设置第一任务堆栈的第一堆栈容量;第一堆栈容量大于或等于第一任务对于第一任务堆栈的第一实际使用量。可见,在不发生堆栈溢出时,本申请方案能够使得第一堆栈容量与第一任务的实际使用量精确匹配,可以避免对于有限的RAM资源的过于浪费,保证任务能够在尽量减少资源浪费的情况下正常运行。
Description
技术领域
本发明涉及操作系统技术领域,更具体地说,涉及一种堆栈容量的设置方法及系统。
背景技术
随着嵌入式软硬件技术的飞速发展,嵌入式系统已经被广泛应用到各种科技领域,如自动控制、机械工程、交通工具、仪器仪表、航空航天等。并且,由于各个领域对于嵌入式系统的性能要求越来越高,嵌入式实时操作系统应运而生。
嵌入式实时操作系统中的任务在执行时需要使用硬件芯片的RAM(RandomAccessMemory,随机存取存储器)空间的一部分,用于保存任务执行过程中需要存储的临时数据、以及发生任务切换时需要存储的硬件芯片通用寄存器数据,这部分RAM空间被称为“任务堆栈”,“任务堆栈”所占用的这部分RAM空间的大小被称为“任务堆栈”的“堆栈容量”。
嵌入式实时操作系统中,需要软件开发人员预先设置任务堆栈的堆栈容量,当堆栈容量设置过小,而任务实际使用的RAM空间超过预先设置的堆栈容量时,将发生堆栈溢出现象,堆栈溢出会使任务的执行出现异常甚至导致系统崩溃。因此,为了保障任务和系统的正常运行,在设置堆栈容量时,通常先将堆栈容量设置为一个预估值,在任务执行过程中,如果由于该预估值过小而发生堆栈溢出,则需要在该预估值的基础上适当调大任务堆栈的堆栈容量,从而避免再发生堆栈溢出现象。
当堆栈容量设置过大时,并不会发生堆栈溢出,但过大的堆栈容量会占用过多的RAM空间,过于浪费有限的RAM资源,而现有技术却只能在检测到堆栈溢出时调大堆栈容量,无法在不发生堆栈溢出时设置合适的能够避免RAM资源过于浪费的堆栈容量。
发明内容
有鉴于此,本发明提供一种堆栈容量的设置方法及系统,以便在不发生堆栈溢出时设置合适的能够避免RAM资源过于浪费的堆栈容量。
为实现上述目的,本发明提供了如下技术方案:
一种堆栈容量的设置方法,包括:
为第一任务分配第一任务堆栈;所述第一任务堆栈为执行所述第一任务时使用的随机存取存储器RAM空间;
在执行所述第一任务的过程中,检测所述第一任务堆栈是否发生堆栈溢出,并在所述第一任务堆栈没有发生堆栈溢出时,检测所述第一任务对于所述第一任务堆栈的第一实际使用量;
以所述第一任务对于所述第一任务堆栈的第一实际使用量为基准,设置所述第一任务堆栈的第一堆栈容量;所述第一堆栈容量大于或等于所述第一任务对于所述第一任务堆栈的第一实际使用量。
优选地,所述检测所述第一任务对于所述第一任务堆栈的第一实际使用量,包括:
检测所述第一任务堆栈中的标识数据,并输出检测结果,根据所述检测结果计算所述第一任务对于所述第一任务堆栈的第一实际使用量;
其中,所述标识数据是预先在所述第一任务堆栈的每个存储单元中写入的标识;所述标识数据用于表征所述存储单元未被使用,且在所述存储单元被使用后消失。
优选地,所述检测所述第一任务堆栈中的标识数据,并输出检测结果,根据所述检测结果计算所述第一任务对于所述第一任务堆栈的第一实际使用量,包括:
按照第一检测顺序依次检测所述第一任务堆栈的存储单元中的所述标识数据,直到检测不到所述标识数据时,输出从所述第一任务堆栈中检测到的所述标识数据的标识数量;所述第一检测顺序为从所述第一任务堆栈的栈顶地址到所述第一任务堆栈的起始地址的检测顺序;
计算所述第一任务堆栈的存储单元的总量与所述标识数量的差值,并将所述差值作为所述第一任务对于所述第一任务堆栈的第一实际使用量。
优选地,所述检测所述第一任务堆栈中的标识数据,并输出检测结果,根据所述检测结果计算所述第一任务对于所述第一任务堆栈的第一实际使用量,包括:
按照第二检测顺序依次检测所述第一任务堆栈的存储单元中的所述标识数据,直到检测到所述标识数据时,输出从所述第一任务堆栈中检测到的不带有所述标识数据的存储单元的单元数量;所述第二检测顺序为从所述第一任务堆栈的起始地址到所述第一任务堆栈的栈顶地址的检测顺序;
将所述单元数量作为所述第一任务对于所述第一任务堆栈的第一实际使用量。
优选地,还包括:
在所述第一任务堆栈发生堆栈溢出时,增大所述第一任务堆栈占用的RAM空间,并继续检测所述第一任务堆栈是否还会发生堆栈溢出,如果所述第一任务堆栈还会发生堆栈溢出则继续增大所述第一任务堆栈占用的RAM空间,直到所述第一任务堆栈不再发生堆栈溢出时,检测所述第一任务对于所述第一任务堆栈的第二实际使用量;
以所述第一任务对于所述第一任务堆栈的第二实际使用量为基准,设置所述第一任务堆栈的第二堆栈容量;所述第二堆栈容量大于或等于所述第一任务对于所述第一任务堆栈的第二实际使用量。
一种堆栈容量的设置系统,包括:
分配模块,用于为第一任务分配第一任务堆栈;所述第一任务堆栈为执行所述第一任务时使用的随机存取存储器RAM空间;
第一检测模块,用于在执行所述第一任务的过程中,检测所述第一任务堆栈是否发生堆栈溢出,并在所述第一任务堆栈没有发生堆栈溢出时,检测所述第一任务对于所述第一任务堆栈的第一实际使用量;
第一设置模块,用于以所述第一任务对于所述第一任务堆栈的第一实际使用量为基准,设置所述第一任务堆栈的第一堆栈容量;所述第一堆栈容量大于或等于所述第一任务对于所述第一任务堆栈的第一实际使用量。
优选地,所述第一检测模块,包括:
检测单元,用于检测所述第一任务堆栈中的标识数据,并输出检测结果,根据所述检测结果计算所述第一任务对于所述第一任务堆栈的第一实际使用量;
其中,所述标识数据是预先在所述第一任务堆栈的每个存储单元中写入的标识;所述标识数据用于表征所述存储单元未被使用,且在所述存储单元被使用后消失。
优选地,所述检测单元,包括:
第一检测子单元,用于按照第一检测顺序依次检测所述第一任务堆栈的存储单元中的所述标识数据,直到检测不到所述标识数据时,输出从所述第一任务堆栈中检测到的所述标识数据的标识数量;所述第一检测顺序为从所述第一任务堆栈的栈顶地址到所述第一任务堆栈的起始地址的检测顺序;
第一计算子单元,用于计算所述第一任务堆栈的存储单元的总量与所述标识数量的差值,并将所述差值作为所述第一任务对于所述第一任务堆栈的第一实际使用量。
优选地,所述检测单元,包括:
第二检测子单元,用于按照第二检测顺序依次检测所述第一任务堆栈的存储单元中的所述标识数据,直到检测到所述标识数据时,输出从所述第一任务堆栈中检测到的不带有所述标识数据的存储单元的单元数量;所述第二检测顺序为从所述第一任务堆栈的起始地址到所述第一任务堆栈的栈顶地址的检测顺序;
第二计算子单元,用于将所述单元数量作为所述第一任务对于所述第一任务堆栈的第一实际使用量。
优选地,还包括:
第二检测模块,用于在所述第一任务堆栈发生堆栈溢出时,增大所述第一任务堆栈占用的RAM空间,并继续检测所述第一任务堆栈是否还会发生堆栈溢出,如果所述第一任务堆栈还会发生堆栈溢出,则继续增大所述第一任务堆栈占用的RAM空间,直到所述第一任务堆栈不再发生堆栈溢出时,检测所述第一任务对于所述第一任务堆栈的第二实际使用量;
第二设置模块,用于以所述第一任务对于所述第一任务堆栈的第二实际使用量为基准,设置所述第一任务堆栈的第二堆栈容量;所述第二堆栈容量大于或等于所述第一任务对于所述第一任务堆栈的第二实际使用量。
通过以上方案可知,因此,本申请方案提供的堆栈容量的设置方法,为第一任务分配第一任务堆栈;所述第一任务堆栈为执行所述第一任务时使用的随机存取存储器RAM空间;在执行所述第一任务的过程中,检测所述第一任务堆栈是否发生堆栈溢出,并在所述第一任务堆栈没有发生堆栈溢出时,检测所述第一任务对于所述第一任务堆栈的第一实际使用量;以所述第一任务对于所述第一任务堆栈的第一实际使用量为基准,设置所述第一任务堆栈的第一堆栈容量;所述第一堆栈容量大于或等于所述第一任务对于所述第一任务堆栈的第一实际使用量。可见,在不发生堆栈溢出时,本申请方案能够根据第一任务对于第一任务堆栈的第一实际使用量,来设置第一任务堆栈的第一堆栈容量,使得第一堆栈容量与第一任务的实际使用量精确匹配,不会占用过多的RAM空间,可以避免对于有限的RAM资源的过于浪费,保证任务能够在尽量减少资源浪费的情况下正常运行。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请提供的一种堆栈容量的设置方法的流程示意图;
图2为本申请提供的另一种堆栈容量的设置方法的流程示意图;
图3为本申请提供的又一种堆栈容量的设置方法的流程示意图;
图4为本申请提供的一种堆栈容量的设置系统的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,本申请实施例公开的一种堆栈容量的设置方法可以应用到嵌入式实时操作系统中,嵌入式实时操作系统的显著特点在于能够为应用程序提供多任务的软件运行环境,本领域技术人员可以在嵌入式实时操作系统中建立若干个任务,根据应用程序不同模块的执行时序,对各个任务的触发条件和优先级进行设置,然后将应用程序的不同模块放置在各个任务中进行调用,从而使应用程序的不同模块在同一个嵌入式系统中非常便捷地按照各自的时序要求进行执行。
图1为本申请提供的一种堆栈容量的设置方法的流程示意图。
本申请实施例公开的一种堆栈容量的设置方法,包括:
S101、为第一任务分配第一任务堆栈;第一任务堆栈为执行第一任务时使用的随机存取存储器RAM空间;
本申请实施例中,软件开发人员为第一任务分配第一任务堆栈,第一任务堆栈是操作系统在执行第一任务时,需要调用的RAM空间。需要说明的是,本申请实施例中,软件开发人员在操作系统中为各个任务分配任务堆栈,可以为任务分配独立的任务堆栈,也可以令若干个任务共同使用同一块任务堆栈。通常情况下,软件开发人员根据工作经验分配各个任务的任务堆栈,或者根据RAM空间的容量大小,根据任务数量平均分配。
S102、在执行第一任务的过程中,检测第一任务堆栈是否发生堆栈溢出,并在第一任务堆栈没有发生堆栈溢出时,检测第一任务对于第一任务堆栈的第一实际使用量;
本申请实施例中,操作系统执行第一任务,在执行任务的过程中,检测第一任务堆栈是否发生堆栈溢出,当未检测到堆栈溢出时,检测第一任务对于第一任务堆栈的第一实际使用量,第一实际使用量是任务在执行过程中第一任务堆栈的最大使用量。需要说明的是,本领域技术人员明确在任务执行的哪一个阶段检测任务堆栈是否发生堆栈溢出才是有意义的。因此,最大使用量可以作为任务堆栈容量的最大参考值。
S103、以第一任务对于第一任务堆栈的第一实际使用量为基准,设置第一任务堆栈的第一堆栈容量;第一堆栈容量大于或等于第一任务对于所述第一任务堆栈的第一实际使用量。
本申请实施例中,得到第一实际使用量后,将其作为基准值,设置第一任务堆栈的第一堆栈容量,第一堆栈容量一定是大于或者等于第一实际使用量的容量,目的是防止堆栈溢出。可以理解的是,通常设置第一堆栈容量会稍大于第一实际使用量,基准值是作为参考值,设置第一堆栈容量并不一定要完全与基准值相同。
可见,在不发生堆栈溢出时,本申请实施例能够根据第一任务对于第一任务堆栈的第一实际使用量,来设置第一任务堆栈的第一堆栈容量,使得第一堆栈容量与第一任务的实际使用量精确匹配,不会占用过多的RAM空间,可以避免对于有限的RAM资源的过于浪费,保证任务能够在尽量减少资源浪费的情况下正常运行。
可以理解的是,本申请实施例公开的一种任务堆栈的设置方法,还包括:
在第一任务堆栈发生堆栈溢出时,增大第一任务堆栈占用的RAM空间,并继续检测第一任务堆栈是否还会发生堆栈溢出,如果第一任务堆栈还会发生堆栈溢出则继续增大第一任务堆栈占用的RAM空间,直到第一任务堆栈不再发生堆栈溢出时,检测第一任务对于所述第一任务堆栈的第二实际使用量;
以第一任务对于第一任务堆栈的第二实际使用量为基准,设置第一任务堆栈的第二堆栈容量;第二堆栈容量大于或等于第一任务对于第一任务堆栈的第二实际使用量。
本申请实施例中,为了保障操作系统不出现堆栈溢出,当检测到堆栈溢出的情况,会对预先设置的任务堆栈进行调整,增大任务堆栈占用的RAM空间,也就是任务堆栈的堆栈容量。调整后,检测是否还会发生堆栈溢出现象,如果还发生堆栈溢出,则继续增大任务堆栈的最大容量,当检测到任务堆栈未发生堆栈溢出,则检测第一任务对于第一任务堆栈的第二实际使用量,与第一实际使用量类似的,将第二实际使用量作为基准,设置第一任务堆栈的第二堆栈容量。
本申请实施例中,当操作系统出现堆栈溢出时,合理调整任务堆栈的堆栈容量,在不发生堆栈溢出时,能够根据第一任务对于第一任务堆栈的第二实际使用量,来设置第一任务堆栈的第二堆栈容量,使得第二堆栈容量与第一任务的实际使用量精确匹配,可以避免对于有限的RAM资源的过于浪费,保证任务能够在尽量减少资源浪费的情况下正常运行。
图2为本申请提供的另一种堆栈容量的设置方法的流程示意图。
本申请实施例公开的设置方法,包括:
S201、为第一任务分配第一任务堆栈;第一任务堆栈为执行第一任务时使用的随机存取存储器RAM空间;
S202、在执行第一任务的过程中,检测第一任务堆栈是否发生堆栈溢出,并在第一任务堆栈没有发生堆栈溢出时,检测第一任务堆栈中的标识数据,并输出检测结果,根据检测结果计算第一任务对于第一任务堆栈的第一实际使用量;
其中,标识数据是预先在第一任务堆栈的每个存储单元中写入的数据,标识数据用于表征存储单元未被使用,且在存储单元被使用后消失。
本申请实施例中,检测第一任务堆栈中的标识数据,并输出检测结果,标识数据是对任务堆栈的每个存储单元都写入用于标识存储单元未被使用的数据,如0xAA。在操作系统启动阶段,自动对存储单元进行标识数据的填充,也就是从任务对应的任务堆栈的起始地址开始,对每个存储单元中都写入相同的标识数据,如0xAA,直至任务堆栈的栈顶地址为止。
当任务执行时,任务的相关数据会使用存储单元,因此,标识数据会被覆盖,如果标识数据消失,则代表存储单元被任务所使用。根据检测第一任务堆栈中的标识数据的检测结果,来计算第一任务对于第一任务堆栈的第一实际使用量,就可以精确得到任务使用。
当然,检测第一任务对于第一任务堆栈的第一实际使用量还可以使用其他的方式,在操作系统启动阶段,将所有存储单元都初始化为0,然后检测存储单元中不为0的数量,来计算第一实际使用量。当然,这种方式并不如使用标识数据的方式得到的结果准确。本申请实施例中优选使用检测第一任务堆栈的标识数据的方式来计算第一实际使用量。
S203、以第一任务对于第一任务堆栈的第一实际使用量为基准,设置第一任务堆栈的第一堆栈容量;第一堆栈容量大于或等于第一任务对于所述第一任务堆栈的第一实际使用量。
本申请实施例中,检测第一任务堆栈中的标识数据,根据检测结果来计算第一任务对第一任务堆栈的第一实际使用量,可以精确的得到第一实际使用量,根据第一实际使用量来设置第一堆栈容量,可以避免对于有限的RAM资源的过于浪费,保证任务能够在尽量减少资源浪费的情况下正常运行。
图3为本申请提供的又一种堆栈容量的设置方法的流程示意图。
本申请提供的一种堆栈容量的设置方法,包括,
S301、为第一任务分配第一任务堆栈;第一任务堆栈为执行第一任务时使用的随机存取存储器RAM空间;
S302、在执行第一任务的过程中,检测第一任务堆栈是否发生堆栈溢出,并在第一任务堆栈没有发生堆栈溢出时,按照第一检测顺序依次检测第一任务堆栈的存储单元中的标识数据,直到检测不到标识数据时,输出从第一任务堆栈中检测到的标识数据的标识数量;
第一检测顺序为从第一任务堆栈的栈顶地址到第一任务堆栈的起始地址的检测顺序;
其中,标识数据是预先在第一任务堆栈的每个存储单元中写入的数据,标识数据用于表征存储单元未被使用,且在存储单元被使用后消失。
本申请实施例中,检测第一任务堆栈中标识数据是按照第一检测顺序执行的,第一检测顺序为从第一任务堆栈的栈顶地址到第一任务堆栈的起始地址的顺序。
可以理解的是,直到检测不到标识数据时,是指当检测到第一个不具有标识数据的存储单元时。在实际使用中,在检测时,可以设置一个软件计数器,初始值为零,按照第一检测顺序,每当检测到一个存储单元具有标识数据,则计数器加一,直到检测到第一个不具有标识数据的存储单元时,检测终止,输出从第一任务堆栈中检测到的标识数据的标识数量。此时,标识数量即计数器中的数值可以代表第一任务未使用的第一任务堆栈的存储单元的数量。
S303、计算第一任务堆栈的存储单元的总量与标识数量的差值,并将差值作为第一任务对于第一任务堆栈的第一实际使用量。
本申请实施例中,输出标识数据的标识数量后,计算第一任务堆栈的存储单元的总量与标识数量的差值,此差值即为第一任务对于第一任务堆栈的第一实际使用量。
可以理解的是,上述S302中,在检测第一任务堆栈的存储单元中的标识数据时,除上述检测方式外,本申请实施例还可以按照第二检测顺序依次检测第一任务堆栈的存储单元中的标识数据,直到检测到标识数据时,输出从第一任务堆栈中检测到的不带有标识数据的存储单元的单元数量;第二检测顺序为从第一任务堆栈的起始地址到第一任务堆栈的栈顶地址的检测顺序;此时在S303中只需要将单元数量作为第一任务对于第一任务堆栈的第一实际使用量即可。
S304、以第一任务对于第一任务堆栈的第一实际使用量为基准,设置第一任务堆栈的第一堆栈容量;第一堆栈容量大于或等于第一任务对于第一任务堆栈的第一实际使用量。
本申请实施例中,检测存储单元中标识数据的单元数量,根据单元数量来确定第一任务堆栈的第一实际使用量,就可以精确的得到第一实际使用量,根据第一实际使用量来设置第一堆栈容量,可以避免对于有限的RAM资源的过于浪费,保证任务能够在尽量减少资源浪费的情况下正常运行。
本申请另一方面公开了一种堆栈容量的设置系统。
图4为本申请提供的一种堆栈容量的设置系统的结构示意图。
本申请实施例公开的一种堆栈容量的设置系统,包括:
分配模块1,用于为第一任务分配第一任务堆栈;所述第一任务堆栈为执行所述第一任务时使用的随机存取存储器RAM空间;
第一检测模块2,用于在执行所述第一任务的过程中,检测所述第一任务堆栈是否发生堆栈溢出,并在所述第一任务堆栈没有发生堆栈溢出时,检测所述第一任务对于所述第一任务堆栈的第一实际使用量;
所述第一检测模块,包括:
检测单元,用于检测所述第一任务堆栈中的标识数据,并输出检测结果,根据所述检测结果计算所述第一任务对于所述第一任务堆栈的第一实际使用量;
所述检测单元,包括:
第一检测子单元,用于按照第一检测顺序依次检测所述第一任务堆栈的存储单元中的所述标识数据,直到检测不到所述标识数据时,输出从所述第一任务堆栈中检测到的所述标识数据的标识数量;所述第一检测顺序为从所述第一任务堆栈的栈顶地址到所述第一任务堆栈的起始地址的检测顺序;
第一计算子单元,用于计算所述第一任务堆栈的存储单元的总量与所述标识数量的差值,并将所述差值作为所述第一任务对于所述第一任务堆栈的第一实际使用量。
其中,所述标识数据是预先在所述第一任务堆栈的每个存储单元中写入的标识;所述标识数据用于表征所述存储单元未被使用,且在所述存储单元被使用后消失。
第二检测子单元,用于按照第二检测顺序依次检测所述第一任务堆栈的存储单元中的所述标识数据,直到检测到所述标识数据时,输出从所述第一任务堆栈中检测到的不带有所述标识数据的存储单元的单元数量;所述第二检测顺序为从所述第一任务堆栈的起始地址到所述第一任务堆栈的栈顶地址的检测顺序;
第二计算子单元,用于将所述单元数量作为所述第一任务对于所述第一任务堆栈的第一实际使用量。
第一设置模块3,用于以所述第一任务对于所述第一任务堆栈的第一实际使用量为基准,设置所述第一任务堆栈的第一堆栈容量;所述第一堆栈容量大于或等于所述第一任务对于所述第一任务堆栈的第一实际使用量。
可见,在不发生堆栈溢出时,本申请方案能够根据第一任务对于第一任务堆栈的第一实际使用量,来设置第一任务堆栈的第一堆栈容量,使得第一堆栈容量与第一任务的实际使用量精确匹配,不会占用过多的RAM空间,可以避免对于有限的RAM资源的过于浪费,保证任务能够在尽量减少资源浪费的情况下正常运行。
第二检测模块4,用于在所述第一任务堆栈发生堆栈溢出时,增大所述第一任务堆栈占用的RAM空间,并继续检测所述第一任务堆栈是否还会发生堆栈溢出,如果所述第一任务堆栈还会发生堆栈溢出,则继续增大所述第一任务堆栈占用的RAM空间,直到所述第一任务堆栈不再发生堆栈溢出时,检测所述第一任务对于所述第一任务堆栈的第二实际使用量;
第二设置模块5,用于以所述第一任务对于所述第一任务堆栈的第二实际使用量为基准,设置所述第一任务堆栈的第二堆栈容量;所述第二堆栈容量大于或等于所述第一任务对于所述第一任务堆栈的第二实际使用量。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种堆栈容量的设置方法,其特征在于,包括:
为第一任务分配第一任务堆栈;所述第一任务堆栈为执行所述第一任务时使用的随机存取存储器RAM空间;
在执行所述第一任务的过程中,检测所述第一任务堆栈是否发生堆栈溢出,并在所述第一任务堆栈没有发生堆栈溢出时,检测所述第一任务对于所述第一任务堆栈的第一实际使用量;
以所述第一任务对于所述第一任务堆栈的第一实际使用量为基准,设置所述第一任务堆栈的第一堆栈容量;所述第一堆栈容量大于或等于所述第一任务对于所述第一任务堆栈的第一实际使用量。
2.根据权利要求1所述的设置方法,其特征在于,所述检测所述第一任务对于所述第一任务堆栈的第一实际使用量,包括:
检测所述第一任务堆栈中的标识数据,并输出检测结果,根据所述检测结果计算所述第一任务对于所述第一任务堆栈的第一实际使用量;
其中,所述标识数据是预先在所述第一任务堆栈的每个存储单元中写入的数据,所述标识数据用于表征所述存储单元未被使用,且在所述存储单元被使用后消失。
3.根据权利要求2所述的设置方法,其特征在于,所述检测所述第一任务堆栈中的标识数据,并输出检测结果,根据所述检测结果计算所述第一任务对于所述第一任务堆栈的第一实际使用量,包括:
按照第一检测顺序依次检测所述第一任务堆栈的存储单元中的所述标识数据,直到检测不到所述标识数据时,输出从所述第一任务堆栈中检测到的所述标识数据的标识数量;所述第一检测顺序为从所述第一任务堆栈的栈顶地址到所述第一任务堆栈的起始地址的检测顺序;
计算所述第一任务堆栈的存储单元的总量与所述标识数量的差值,并将所述差值作为所述第一任务对于所述第一任务堆栈的第一实际使用量。
4.根据权利要求2所述的设置方法,其特征在于,所述检测所述第一任务堆栈中的标识数据,并输出检测结果,根据所述检测结果计算所述第一任务对于所述第一任务堆栈的第一实际使用量,包括:
按照第二检测顺序依次检测所述第一任务堆栈的存储单元中的所述标识数据,直到检测到所述标识数据时,输出从所述第一任务堆栈中检测到的不带有所述标识数据的存储单元的单元数量;所述第二检测顺序为从所述第一任务堆栈的起始地址到所述第一任务堆栈的栈顶地址的检测顺序;
将所述单元数量作为所述第一任务对于所述第一任务堆栈的第一实际使用量。
5.根据权利要求1所述的设置方法,其特征在于,还包括:
在所述第一任务堆栈发生堆栈溢出时,增大所述第一任务堆栈占用的RAM空间,并继续检测所述第一任务堆栈是否还会发生堆栈溢出,如果所述第一任务堆栈还会发生堆栈溢出则继续增大所述第一任务堆栈占用的RAM空间,直到所述第一任务堆栈不再发生堆栈溢出时,检测所述第一任务对于所述第一任务堆栈的第二实际使用量;
以所述第一任务对于所述第一任务堆栈的第二实际使用量为基准,设置所述第一任务堆栈的第二堆栈容量;所述第二堆栈容量大于或等于所述第一任务对于所述第一任务堆栈的第二实际使用量。
6.一种堆栈容量的设置系统,其特征在于,包括:
分配模块,用于为第一任务分配第一任务堆栈;所述第一任务堆栈为执行所述第一任务时使用的随机存取存储器RAM空间;
第一检测模块,用于在执行所述第一任务的过程中,检测所述第一任务堆栈是否发生堆栈溢出,并在所述第一任务堆栈没有发生堆栈溢出时,检测所述第一任务对于所述第一任务堆栈的第一实际使用量;
第一设置模块,用于以所述第一任务对于所述第一任务堆栈的第一实际使用量为基准,设置所述第一任务堆栈的第一堆栈容量;所述第一堆栈容量大于或等于所述第一任务对于所述第一任务堆栈的第一实际使用量。
7.根据权利要求6所述的设置系统,其特征在于,所述第一检测模块,包括:
检测单元,用于检测所述第一任务堆栈中的标识数据,并输出检测结果,根据所述检测结果计算所述第一任务对于所述第一任务堆栈的第一实际使用量;
其中,所述标识数据是预先在所述第一任务堆栈的每个存储单元中写入的标识;所述标识数据用于表征所述存储单元未被使用,且在所述存储单元被使用后消失。
8.根据权利要求7所述的设置系统,其特征在于,所述检测单元,包括:
第一检测子单元,用于按照第一检测顺序依次检测所述第一任务堆栈的存储单元中的所述标识数据,直到检测不到所述标识数据时,输出从所述第一任务堆栈中检测到的所述标识数据的标识数量;所述第一检测顺序为从所述第一任务堆栈的栈顶地址到所述第一任务堆栈的起始地址的检测顺序;
第一计算子单元,用于计算所述第一任务堆栈的存储单元的总量与所述标识数量的差值,并将所述差值作为所述第一任务对于所述第一任务堆栈的第一实际使用量。
9.根据权利要求7所述的设置系统,其特征在于,所述检测单元,包括:
第二检测子单元,用于按照第二检测顺序依次检测所述第一任务堆栈的存储单元中的所述标识数据,直到检测到所述标识数据时,输出从所述第一任务堆栈中检测到的不带有所述标识数据的存储单元的单元数量;所述第二检测顺序为从所述第一任务堆栈的起始地址到所述第一任务堆栈的栈顶地址的检测顺序;
第二计算子单元,用于将所述单元数量作为所述第一任务对于所述第一任务堆栈的第一实际使用量。
10.根据权利要求6所述的设置系统,其特征在于,还包括:
第二检测模块,用于在所述第一任务堆栈发生堆栈溢出时,增大所述第一任务堆栈占用的RAM空间,并继续检测所述第一任务堆栈是否还会发生堆栈溢出,如果所述第一任务堆栈还会发生堆栈溢出,则继续增大所述第一任务堆栈占用的RAM空间,直到所述第一任务堆栈不再发生堆栈溢出时,检测所述第一任务对于所述第一任务堆栈的第二实际使用量;
第二设置模块,用于以所述第一任务对于所述第一任务堆栈的第二实际使用量为基准,设置所述第一任务堆栈的第二堆栈容量;所述第二堆栈容量大于或等于所述第一任务对于所述第一任务堆栈的第二实际使用量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510518787.5A CN105094991A (zh) | 2015-08-21 | 2015-08-21 | 一种堆栈容量的设置方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510518787.5A CN105094991A (zh) | 2015-08-21 | 2015-08-21 | 一种堆栈容量的设置方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105094991A true CN105094991A (zh) | 2015-11-25 |
Family
ID=54575497
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510518787.5A Pending CN105094991A (zh) | 2015-08-21 | 2015-08-21 | 一种堆栈容量的设置方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105094991A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109426501A (zh) * | 2017-06-27 | 2019-03-05 | 比亚迪股份有限公司 | 堆栈自检方法和装置 |
CN112817715A (zh) * | 2021-01-28 | 2021-05-18 | 展讯通信(天津)有限公司 | 任务切换方法、装置及设备 |
CN114116204A (zh) * | 2021-11-02 | 2022-03-01 | 郑州市中心医院 | 一种基于传感器的磨牙症监测方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5835958A (en) * | 1996-10-29 | 1998-11-10 | Sun Microsystems, Inc. | Method and apparatus for dynamically sizing non-contiguous runtime stacks |
CN101272551A (zh) * | 2007-03-23 | 2008-09-24 | 中兴通讯股份有限公司 | 一种嵌入式系统最大栈空间的设定方法 |
CN101290590A (zh) * | 2008-06-03 | 2008-10-22 | 北京中星微电子有限公司 | 一种嵌入式操作系统中切换任务的方法和单元 |
CN102662850A (zh) * | 2012-03-30 | 2012-09-12 | 杭州华三通信技术有限公司 | 一种内存管理方法及其系统 |
US20120324194A1 (en) * | 2011-06-14 | 2012-12-20 | International Business Machines Corporation | Adjusting the amount of memory allocated to a call stack |
CN103593606A (zh) * | 2013-11-20 | 2014-02-19 | 北京经纬恒润科技有限公司 | 上下文信息管理方法及系统 |
-
2015
- 2015-08-21 CN CN201510518787.5A patent/CN105094991A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5835958A (en) * | 1996-10-29 | 1998-11-10 | Sun Microsystems, Inc. | Method and apparatus for dynamically sizing non-contiguous runtime stacks |
CN101272551A (zh) * | 2007-03-23 | 2008-09-24 | 中兴通讯股份有限公司 | 一种嵌入式系统最大栈空间的设定方法 |
CN101290590A (zh) * | 2008-06-03 | 2008-10-22 | 北京中星微电子有限公司 | 一种嵌入式操作系统中切换任务的方法和单元 |
US20120324194A1 (en) * | 2011-06-14 | 2012-12-20 | International Business Machines Corporation | Adjusting the amount of memory allocated to a call stack |
CN102662850A (zh) * | 2012-03-30 | 2012-09-12 | 杭州华三通信技术有限公司 | 一种内存管理方法及其系统 |
CN103593606A (zh) * | 2013-11-20 | 2014-02-19 | 北京经纬恒润科技有限公司 | 上下文信息管理方法及系统 |
Non-Patent Citations (2)
Title |
---|
JOHN REGEHR 等: "Eliminating Stack Overflow by Abstract Interpretation", 《THIRD INTERNATIONAL CONFERENCE,EMSOFT 2003》 * |
SANGHO YI 等: "SESAME-P:Memory Pool-Based Dynamic Stack Management for Sensor Operating Systems", 《4TH IEEE INTERNATIONAL CONFERENCE,DCOSS 2008》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109426501A (zh) * | 2017-06-27 | 2019-03-05 | 比亚迪股份有限公司 | 堆栈自检方法和装置 |
CN112817715A (zh) * | 2021-01-28 | 2021-05-18 | 展讯通信(天津)有限公司 | 任务切换方法、装置及设备 |
CN114116204A (zh) * | 2021-11-02 | 2022-03-01 | 郑州市中心医院 | 一种基于传感器的磨牙症监测方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9547530B2 (en) | Data processing apparatus and method for processing a plurality of threads | |
CN106569891B (zh) | 一种存储系统中任务调度执行的方法和装置 | |
CN104981789A (zh) | 用于可变延时存储器操作的设备及方法 | |
JP6446125B2 (ja) | リソースリーク検出の方法、装置及びシステム | |
CN105117285B (zh) | 一种基于移动虚拟化系统的非易失性存储器调度优化方法 | |
CN104932933B (zh) | 一种获取自旋锁的方法及装置 | |
CN105094991A (zh) | 一种堆栈容量的设置方法及系统 | |
CN107562495A (zh) | 一种应用程序的启动方法和启动装置 | |
US20150154132A1 (en) | System and method of arbitration associated with a multi-threaded system | |
CN107832151A (zh) | 一种cpu资源分配方法、装置及设备 | |
CN105988921A (zh) | 一种内存越界的检测方法及装置 | |
CN104317734A (zh) | 一种适用于slab的内存分配方法及装置 | |
CN103885804A (zh) | 一种fpga多功能项动态加载系统及其方法 | |
US10922022B2 (en) | Method and system for managing LBA overlap checking in NVMe based SSDs | |
US9513969B2 (en) | Method for the management of task execution in a computer system | |
JP2007304765A (ja) | プロセッサシステム及びプロセッサシステムの性能測定方法 | |
CN102214147A (zh) | 一种检测内存访问越界的方法及装置 | |
CN111506400A (zh) | 计算资源分配系统、方法、装置和计算机设备 | |
CN103593606A (zh) | 上下文信息管理方法及系统 | |
CN104281587A (zh) | 一种建立连接的方法及装置 | |
CN105204903A (zh) | 一种进程模块加载拦截方法及装置 | |
CN101154193B (zh) | 存储管理装置和存储管理方法 | |
CN103294606A (zh) | 一种分配内存及检测内存溢出的方法和装置 | |
US20120005414A1 (en) | Semiconductor memory device and method of reading data from and writing data into a plurality of storage units | |
CN109656720A (zh) | 地址空间分配方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20151125 |
|
RJ01 | Rejection of invention patent application after publication |