文件名称:堆栈检验-emc datadomain 2500 存储设 备维护手册
文件大小:4.33MB
文件格式:PDF
更新时间:2024-06-29 01:39:09
uCOS-II
图 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%