SylixOS 中查看线程此时所处的状态可通过 Shell 命令 ts 查看“STAT”列,如下,线程“t_test”处于“SLP”状态。
扩展:“ts” 命令线程打印信息含义为:线程名、ID 号、所属进程 ID、优先级、状态、线程锁、线程安全模式标志、等待计数器、缺页中断
查看SylixOS中该部分代码描述:
if (tcbdesc.TCBD_usStatus & LW_THREAD_STATUS_SEM) { /* 等待信号量 */
pcPendType = "SEM";
} else if (tcbdesc.TCBD_usStatus & LW_THREAD_STATUS_MSGQUEUE) { /* 等待消息队列 */
pcPendType = "MSGQ";
} else if (tcbdesc.TCBD_usStatus & LW_THREAD_STATUS_JOIN) { /* 等待其他线程 */
pcPendType = "JOIN";
} else if (tcbdesc.TCBD_usStatus & LW_THREAD_STATUS_SUSPEND) { /* 挂起 */
pcPendType = "SUSP";
} else if (tcbdesc.TCBD_usStatus & LW_THREAD_STATUS_EVENTSET) { /* 等待事件组 */
pcPendType = "ENTS";
} else if (tcbdesc.TCBD_usStatus & LW_THREAD_STATUS_SIGNAL) { /* 等待信号 */
pcPendType = "WSIG";
} else if (tcbdesc.TCBD_usStatus & LW_THREAD_STATUS_INIT) { /* 初始化中 */
pcPendType = "INIT";
} else if (tcbdesc.TCBD_usStatus & LW_THREAD_STATUS_WDEATH) { /* 僵死状态 */
pcPendType = "WDEA";
} else if (tcbdesc.TCBD_usStatus & LW_THREAD_STATUS_DELAY) { /* 睡眠 */
pcPendType = "SLP";
} else if (tcbdesc.TCBD_usStatus & LW_THREAD_STATUS_STOP) { /* 停止 */
pcPendType = "STOP";
} else if (tcbdesc.TCBD_usStatus & LW_THREAD_STATUS_WSTAT) { /* 等待状态转换 */
pcPendType = "WSTA";
} else {
pcPendType = "RDY"; /* 就绪态 */
}```
根据代码中获取tcb后信息的判断可知 “ts” 命令中 “STAT” 打印字符串表示的信息为:
STAT | 状态 |
---|---|
SEM | 等待信号量 |
MSGQ | 等待消息队列 |
JOIN | 等待其他线程 |
SUSP | 挂起 |
ENTS | 等待事件组 |
WSIG | 等待信号 |
INIT | 初始化中 |
WDEA | 僵死状态 |
SLP | 睡眠 |
STOP | 停止 |
WSTA | 等待状态转换 |
RDY | 就绪态 |