This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMDS64EVM:ThreadX 浮点问题。

Guru**** 2362840 points
Other Parts Discussed in Thread: TMDS64EVM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1506453/tmds64evm-threadx-floating-point-issue

器件型号:TMDS64EVM

工具/软件:

它可能关心的对象、

我已从 https://github.com/TexasInstruments/mcupsdk-core.git 下载 ThreadX 移植代码 

我已在 TMDS64EVM 板上成功移植 ThreadX。  

在移植 R5F 内核后、我注意到浮点打印问题。

线程在 main 函数开始之前、如果我放入以下代码、  

main()

{  

 悬空 A = 3.0F;
 DebugP_log ("[R5_0] R50 浮点值%f!!\r\n"、a);

  /*输入 ThreadX 内核。 */
  tx_kernel_enter ();

}

它 printf "[MAIN_Cortex_R5_0_0][R5_0] R50 float 值 3.000000!!"  浮点打印没有问题。

Buf 在线程入口函数执行线程后、浮点变量显示奇怪的值。

void tx_application_define (void * first_unused_memory)

UINT 状态;

状态= tx_thread_create (&main_thread、/*指向主线程对象的指针。 */
                     "main_thread"、/*用于调试的任务名称。 */
                      主线程的 ThreadX_main、/*条目函数。 */
                      0、/*传递给 entry 函数的参数。 */
                      MAIN_THREAD_STACK、/*主线程栈。 */
                      MAIN_TASK_STACK_SIZE、/*主线程栈大小(以字节为单位)。 */
                      MAIN_TASK_PRI、/*主任务优先级。 */
                      MAIN_TASK_PRI、/*已禁用占先的最高优先级。 */
                      tx_no_time_slice、/*无时间片。 */
                      TX_AUTO_START);/*立即启动。 */

}

void ThreadX_main ()

   悬空 A = 3.0F;
  DebugP_log ("[R5_0] R50 浮点值%f!!\r\n"、a);

}

在 ThreadX_main 函数中、它按如下方式打印值:

"[R5_0] R50浮点值32.000008!!!"

我已通过定义 TX_ENABLE_FPU_support 功能启用 FPU 上下文切换、但运气不好。

请告诉我们我必须修改代码的哪一部分。

谢谢您、

Sangjoon

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Sangjoon、

    上述问题是每次发生、还是这种随机现象?

    此致、

    Tushar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    每次都是这样。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    您是否可以使用 CCS 分步调试它、并检查浮点变量的值在什么点发生变化?

    若要使用 CCS 进行调试、请参阅  CCS_launch_run 

    此致、

    Tushar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已经调试过它。 内存内容不变。 例如、在上面的示例中、浮点 A = 3.0F、我检查变量 A 的栈内存地址、它在 DebugP_LOG 之前和之后从未改变、但 DebugP_LOG 显示错误的值。 创建线程后发生了这种情况。 在创建线程之前、DebugP_LOG 打印正确的值。 是否必须在 ThreadX 单元中启用 FPU? 我尝试启用#define TX_ENABLE_VFP_SUPPORT、但发生了崩溃。

    此致、

    Sangjoon

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Sangjoon、

    它在 DebugP_log 之前和之后从未更改过、但 DebugP_LOG 显示错误的值。

    可以试试 步进 DebugP_LOG API、而不是 几步之遥 ?  

    内部的 DebugP_LOG API 将调用各种其他 API、我想检查在哪个 API 调用之后传递的值发生更改。

    此致、

    Tushar

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是我发现的。 当我打印 A=3.02f 时

    在线程之前、在 main 函数中、

    在 printf.c 第384行中、

    int Whole =(int)值

    整场比赛3.

    但在线程启动后执行

    整体显示0。

    我无法读取值、因为它显示为这样。

    我已经连接了 ThreadX 库、请加载这个 AM64X EVM R5内核、并告诉我我应该查看哪个器件。

    e2e.ti.com/.../threadx.am64x.r5f.ti_2D00_arm_2D00_clang.release.lib