uC/OS - III 系统DEBUG时内核对象统计信息
调试 uC/OS - III 系统的内核对象统计信息整理,摘自书中:
内核对象类型 | 变量 / 属性名 | 含义说明 | 补充场景 / 作用 |
---|---|---|---|
任务 | .StkFree | 任务尚未使用的堆栈空间量(堆栈项数),仅 OS_CFG_TASK_STAT_STK_CHK_EN = 1 时有效 | 辅助判断任务堆栈剩余空间,预防堆栈溢出,结合 .StkUsed 优化堆栈配置 |
.StkUsed | 任务堆栈的最大使用量(堆栈项数),仅 OS_CFG_TASK_STAT_STK_CHK_EN = 1 时有效 | 反映任务运行中堆栈实际消耗峰值,若接近堆栈总大小,需考虑增大堆栈空间 | |
.TickRemain | 任务定时剩余时间量(时钟节拍为单位),如延时、等待内核对象超时时的剩余时长 | 排查任务阻塞 / 延时异常,若超时后任务未正确唤醒,需检查超时逻辑与内核对象操作 | |
信号量 | .NamePtr | 指向 ASCII 字符串的指针,为信号量自定义名称(以 \0 结尾,长度不限) | 多信号量场景下,通过名称快速识别功能(如 “KeySem”“DataSem” 区分不同用途) |
.PendList.NbrEntries | 等待该信号量的任务数量,记录等待列表中的任务项数 | 若值居高不下,检查信号量释放逻辑,避免任务长期阻塞无法获取信号量 | |
.Ctr | 信号量当前计数,二进制信号量为 0/1,计数型信号量为可用资源数量 | 异常变负时(如释放次数>获取次数),排查 OSSemPend /OSSemPost 调用合规性 | |
.OwnerOriginalPrio | 保存持有互斥型信号量任务的原优先级(普通计数信号量无此逻辑) | 用于互斥信号量嵌套获取 / 释放,确保临界区资源正确管理,避免优先级反转问题 | |
.OwnerTCBPtr->Prio | 指向持有互斥型信号量任务的 OS_TCB 指针,判断任务优先级是否被改变(如继承) | 结合原优先级,分析优先级继承 / 恢复是否正常,解决因优先级异常导致的调度问题 | |
.OwnerNestingCtr | 记录持有互斥型信号量任务的请求嵌套次数 | 互斥信号量嵌套场景(如任务多次获取同一信号量),保证释放次数匹配获取次数 | |
.TS | 最后一次发出互斥型信号量的时间戳(系统时钟节拍数) | 分析信号量触发频率与时序,排查信号量同步延迟、任务响应慢等问题 | |
消息队列 | .NamePtr | 指向 ASCII 字符串的指针,为消息队列自定义名称(以 \0 结尾,长度不限) | 多队列场景下,通过名称区分功能(如 “CmdQueue”“DataQueue” ) |
.PendList.NbrEntries | 等待队列中消息的任务数量,记录等待列表中的任务项数 | 任务长期阻塞时,检查消息发送逻辑,避免队列满导致消息无法入队、任务饿死 | |
.MsgQ.NbrEntries | 队列中当前消息数量 | 若等于队列长度且新消息入队失败,需扩容队列或优化消息消费速度 |