一种嵌入式系统最大栈空间的设定方法

文档序号:7648254阅读:141来源:国知局
专利名称:一种嵌入式系统最大栈空间的设定方法
技术领域
本发明涉及CDMA ( Code Division Multiple Access )无线通讯终端 产品最大栈空间设定的方法,尤其涉及一种嵌入式系统最大栈空间的设定方法。
背景技术
目前,有很多情况下,嵌入式系统对成本要求比较敏感,采用的RAM 空间都比较有限,所以多采用固定栈空间的方式(如图1所示),每个任 务初始化时固定栈空间的大小有非常大的好处任务调度时算法相对简 单,执行效率比动态分配栈空间要高,速度更快。但是,由此产生一个问题到底初始化时每个任务栈空间的大小设 为多大是一个非常突出的问题。如果每个栈空间分配过大,对有限的 RAM空间是个极大的浪费(在嵌入式系统中往往由于成本问题,所以 最好占用较少的RAM空间),如果分配过小,会导致栈溢出,这样会 导致程序异常死机、重启、运行混乱,后果非常严重。发明内容本发明所要解决的技术问题是提供了 一种设定嵌入式系统最大栈 空间的新方法,该方法简便易行,并且具有充分有效的依据,减少对RAM 空间的浪费。本发明为解决上述技术问题所采用的技术方案为一种嵌入式系统最大栈空间设定方法,包括以下步骤A、 根据每个任务的空间情况,预定该任务的栈空间最大预计值;B、 通过一段时间的实际运行,得到该任务占用栈空间的实际最大' 值;C、 根据所述实际最大值,最终确定该任务的最大栈空间。所述的方法,其中所述的步骤B采用如下方法获得栈空间的实际 最大值Bl、程序初始化时,把分配给栈的空间全部初始化成一特定值; B2、当运行一段时间后,从栈空间最大预计值位置开始向栈底方向查找,记录栈空间中第 一个与所述特定值不同的位置为当前使用最大位置;B3、利用当前使用最大位置减去栈底初始位置获得栈空间的实际最 大值。所述的方法,其中所述特定值为0xAA。所述的方法,其中最终确定的最大栈空间为所述实际最大值的二倍。本发明的有益效果为由于本发明设定某个任务的最大栈空间,是 以较长时间段内该任务所占用的栈空间实际最大值为参考依据的,因此 既不会导致栈空间的不够导致异常,也不会为了避免溢出而浪费RAM 空间,可以有效保证RAM空间的合理应用,减少不必要的成本开支, 降低成本。本发明的方法,思路独到、新颖,并且简单易行。


图1为初始化时固定栈空间的位置示意图;图2为本发明方法中某个栈所用空间的位置示意图。
具体实施方式
下面根据附图和实施例对本发明作进 一 步详细说明 本发明的基本方法是首先根据每个任务的空间情况,预定该任务 的栈空间最大预计值;然后通过一段时间的实际运行,得到该任务占用 栈空间的实际最大值;最终根据所述实际最大值,最终确定该任务的最 大栈空间。参见图2,本技术方案的具体实施包括以下几个步骤1,根据每个任务的空间情况预估计一个最大预计值,这个值可以 设的比较大,比如任务占用的较大的可以先设置为8192字节,任务较 小的先设为4096字节,如果代码是基于某个解决方案的话, 一般解决 方案会给出一个建议值,可以将最大预计值设为建议值的2倍左右。总 之,应先给一个较大的栈空间值,如果栈空间给的不够大,导致栈溢出, 可以通过仿真器来看是哪个任务栈溢出,这样就能把栈空间放大到比较 合适的大小。2,在以上设定的基础上,通过一段时间的运行,记录下这段时间 每个任务占用栈的实际最大值。某个任务某个时间运行中占用的栈的最 大空间可以通过如下方式取到2.1、 程序初始化时,可以把RAM空间中分配给栈的空间全部初始 化成某个特定的值,比如0xAA;设置成某个特定值有相当的好处,可 以在从未用的一端往用的一端查找的时候,发现第一个不是0xAA的地 方就是已经使用的地方。2.2、 在运行了一段时间后(比如两天或三天),通过从每个任务初 始化时栈空间最大预计值的位置(图2所示的栈顶位置,记为 location—taskjop )往回查找,当找到第一个已经不是0xAA的位置(图 2栈指针所指之处),记为当前使用的最大位置location—task—used,因 为如果空间还是为0xAA,表明该空间没有被改写过,即表明该空间没 有被使用,只要使用过一次的空间,那么就不可能是0xAA。由于栈底初始位置在编译时已经固定下来,记为location—task,这样可以得出在 这l殳时间内已经使用的最大才戋空间为location_task—used - location—task, 即该任务占用栈空间的实际最大值。3,根据该任务占用栈空间的实际最大值,确定该任务的最大栈空 间,由于程序在某些条件某分支上需要在栈上额外开辟空间,所以根据 本发明 一较佳实施例,使用上面得出的最大栈空间的两倍作为运行中开 辟的栈空间的大小。本发明所述方法具有较大的通用性,针对提供无线接入功能的 GSM、 PHS、 WCDMA、 TD-SCDMA、单模/多模无线接入终端产品,均 可以用本发明进行最大栈空间的设定,因此方便用户,适用范围广,也 简单易行。应当理解的是,对本发明技术所在领域的普通技术人员来说,可以 根据本发明的技术方案及其构思进行相应的等同改变或替换,而所有这 些改变或替换,都应属于本发明所附权利要求的保护范围。
权利要求
1. 一种嵌入式系统最大栈空间的设定方法,包括以下步骤A、根据每个任务的空间情况,预定该任务的栈空间最大预计值;B、通过一段时间的实际运行,得到该任务占用栈空间的实际最大值;C、根据所述实际最大值,最终确定该任务的最大栈空间。
2、 根据权利要求1所述的方法,其特征在于所述的步骤B采用 如下方法获得栈空间的实际最大值Bl、程序初始化时,把分配给栈的空间全部初始化成一特定值; B2、当运行一段时间后,从栈空间最大预计值位置开始向栈底方向查找,记录栈空间中第 一个与所述特定值不同的位置为当前使用最大位置; B3、利用当前使用最大位置减去栈底初始位置获得栈空间的实际最大值。
3、 根据权利要求1或2所述的方法,其特征在于最终确定的最 大栈空间为所述实际最大值的二倍。
全文摘要
一种嵌入式系统最大栈空间的设定方法,包括以下步骤A.根据每个任务的空间情况,预定该任务的栈空间最大预计值;B.通过一段时间的实际运行,得到该任务占用栈空间的实际最大值;C.根据所述实际最大值,最终确定该任务的最大栈空间。采用本发明方法进行最大栈空间的设定时,既不会导致栈空间的不够导致异常,也不会为了避免溢出而浪费RAM空间,可以有效保证RAM空间的合理应用,减少不必要的成本开支,降低成本。
文档编号H04J13/00GK101272551SQ20071007367
公开日2008年9月24日 申请日期2007年3月23日 优先权日2007年3月23日
发明者李夏忠, 蔡红红 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1