硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3943|回复: 1
收起左侧

[ThreadX全家桶] 如何在ThreadX里面单纯的通过其API识别内核已经启动,给的函数TX_THREAD_GET_SYSTEM_STATE

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
发表于 2020-8-5 10:26:33 | 显示全部楼层 |阅读模式
原始定义:
#define TX_THREAD_GET_SYSTEM_STATE()        (_tx_thread_system_state | __get_ipsr_value())

其中_tx_thread_system_state 有三个形参:

#define TX_INITIALIZE_IN_PROGRESS             ((ULONG) 0xF0F0F0F0UL)
#define TX_INITIALIZE_ALMOST_DONE            ((ULONG) 0xF0F0F0F1UL)
#define TX_INITIALIZE_IS_FINISHED               ((ULONG) 0x00000000UL)


而 __get_ipsr_value是发生中断后,中断的异常号获取,等于0表示在任务里面调用,非0表示在中断里面。
看了几处代码,他们的意思是这么判断:

if (TX_THREAD_GET_SYSTEM_STATE() >= TX_INITIALIZE_IN_PROGRESS)
{
    系统还没有初始化
}
{
    系统已经启动
}

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115787
QQ
 楼主| 发表于 2020-8-5 10:38:13 | 显示全部楼层
找到根节了:

变量已经做了全局初始化,之前还以为没有做全局初始化就做判断使用,感觉有点不放心。
  1. /* Define the current state variable.  When this value is 0, a thread
  2.    is executing or the system is idle.  Other values indicate that
  3.    interrupt or initialization processing is active.  This variable is
  4.    initialized to TX_INITIALIZE_IN_PROGRESS to indicate initialization is
  5.    active.  */

  6. volatile ULONG  _tx_thread_system_state =  TX_INITIALIZE_IN_PROGRESS;
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-19 07:22 , Processed in 0.192934 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表