You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ThreadX模块及模块管理器中tx_time_get()始终返回0的问题求助

解决ThreadX tx_time_get()始终返回0的问题

先看代码本身的问题

你当前的代码连续两次调用tx_time_get(),如果系统节拍执行很快,两次调用大概率在同一个时间节拍周期内,所以cycle_time必然为0。但核心问题是tx_time_get()无论在哪都返回0,说明系统计时根本没工作,按以下步骤排查:

排查步骤

  • 检查ThreadX系统时钟初始化

    • 确认在tx_application_define函数中是否调用了tx_timer_activate(),这个函数是启动ThreadX定时器系统的关键,没调用的话计时不会开始。
    • 验证硬件定时器是否正确配置为ThreadX的时钟源:定时器的中断要能正常触发,中断优先级设置不能被系统其他中断屏蔽,定时器的计数周期要和TX_TIMER_TICKS_PER_SECOND的定义匹配。
    • 检查TX_TIMER_TICKS_PER_SECOND宏是否被正确定义,不能设为0,一般根据硬件定时器频率设置(比如1ms一个节拍的话设为1000)。
  • 确认调用时机是否合法

    • 不能在tx_kernel_enter()之前调用tx_time_get(),tx_kernel_enter()是启动ThreadX内核的入口,内核没启动时计时系统还没初始化,返回0是正常的。
    • 如果在中断服务程序中调用,确保中断是在ThreadX内核启动后触发的,且tx_time_get()允许在中断上下文调用(ThreadX官方文档明确这个API支持中断上下文)。
  • 检查代码配置错误

    • 排查是否有宏定义意外替换了tx_time_get(),比如某些自定义宏把它改成了返回0的空实现。
    • 确认ULONG类型和ThreadX定义的TX_TIMER_TICK类型一致,避免因类型不匹配导致的返回值异常。

验证测试代码

修改代码加入延迟,验证计时是否正常工作:

ULONG start_time, current_time, cycle_time;
start_time = tx_time_get();
tx_thread_sleep(1); // 等待1个系统节拍
current_time = tx_time_get();
cycle_time = current_time - start_time;

如果cycle_time返回1(或接近设置的节拍数),说明计时系统正常,原问题只是两次调用间隔太短。

内容的提问来源于stack exchange,提问作者Hamdim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:20:32