-
EMC DataDomain 2500 存储设备的堆栈检验维护手册
资源介绍
图 4.2 堆栈检验
OSTaskStkChk()顺着堆栈的栈底开始计算空闲的堆栈空间大小,具体实现方法是统计储
存值为 0的连续堆栈入口的数目,直到发现储存值不为 0的堆栈入口[F4.2(5)]。注意堆栈
入口的储存值在进行检验时使用的是堆栈的数据类型(参看 OS_CPU.H中的 OS_STK)。换句话
说,如果堆栈的入口有 32位宽,对 0值的比较也是按 32位完成的。所用的堆栈的空间大小
是指从用户在 OSTaskCreateExt()中定义的堆栈大小中减去了储存值为 0的连续堆栈入口以
后的大小。OSTaskStkChk()实际上把空闲堆栈的字节数和已用堆栈的字节数放置在
0S_STK_DATA 数据结构中(参看µCOS_Ⅱ.H)。注意在某个给定的时间,被检验的任务的堆栈
指针可能会指向最初的堆栈栈顶(TOS)与堆栈最深处之间的任何位置[F4.2(7)]。每次在调用
OSTaskStkChk()的时候,用户也可能会因为任务还没触及堆栈的最深处而得到不同的堆栈的
空闲空间数。
用户应该使自己的应用程序运行足够长的时间,并且经历最坏的堆栈使用情况,这样才
能得到正确的数。一旦 OSTaskStkChk()提供给用户最坏情况下堆栈的需求,用户就可以重
新设置堆栈的最后容量了。为了适应系统以后的升级和扩展,用户应该多分配 10%-100%