有一个疑问,stat函数的就绪标志位是什么时候用什么方法设置的呢?
下面继续堆栈检查的函数
这个函数有两个参数,分别是优先级prio和指向OS_STK_DATA数据结构的指针
这个数据结构里面有两个变量分别是
INT32U OSFree; /* Number of free bytes on the stack*/
INT32U OSUsed; /* Number of bytes used on the stack */
用来返回栈的使用情况
第一步,设置关中断使用的cpu_sr
第二步,检查prio是不是合法的,在0-idleprio之间,检查指向OS_STK_DATA返回值的指针是不是为空
第三步,初始化OS_STK_DATA中的两个变量为0
第四步,关中断
第五步,检查相应的任务TCB是否存在,赋值给ptcb指针,ptcb->OSTCBOpt & OS_TASK_OPT_STK_CHK检查TCB的chk使能标志位是不是被置1
第六步,从TCB读取栈的信息,栈大小,栈底地址等
第七步,开中断
第八步,判断是高地址栈顶还是低地址栈顶,分别用while循环检查是否为0,如果为零,free变量加1
第九步,将free*sizeof(OS_STK)和(size - free) * sizeof(OS_STK)存入p_stk_data返回的数据中
返回NO_ERR宏结束
阅读(1281) | 评论(0) | 转发(0) |