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.

[参考译文] CC2340R5:LOG_printf 正常运行。

Guru**** 2455560 points
Other Parts Discussed in Thread: SEGGER

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1506892/cc2340r5-log_printf-is-working-incorrectly

器件型号:CC2340R5
主题中讨论的其他部件:SEGGER

工具/软件:

我一直在尝试使用"log"示例来检查"log"printf 功能、但问题是它通过 UART 在我的终端上打印垃圾。 我获取 示波器以查看在"mainthread ()"函数中以下代码行在 UART 上打印的内容:

    /* Greet the user, send this to all modules */
    Log_printf(LogModule_App1, Log_DEBUG, "Hello World! %d", 1);
    LogSinkUART_flush();
    Log_printf(LogModule_App2, Log_DEBUG, "Hello World!");
    LogSinkUART_flush();
    Log_printf(LogModule_App3, Log_DEBUG, "Hello World!");
    LogSinkUART_flush();
 

它将打印"Hello World!"。 但实际打印的内容是 12个字节、4个字节表示一些指针地址、4个字节表示当前时间戳、最后4个字节表示 v_args、上述代码行中的第一行为1。

我如何知道每个字节代表什么? 我一直在调试"日志"示例代码、并 深入研究了库源代码。 我不知道为什么会发生这种情况。 我们已经等了几小时、无法确定为什么 TI 提供的示例代码无法正常工作。

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

    您好:

    只需仔细检查、但您确实参考了 SDK 文档中的 LOG_printf 部分:

    调试—SimpleLinkTm 低功耗 F3 SDK BLE5-Stack 用户指南3.04.00文档

    谢谢、
    Alex F

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

    不幸的是、我刚意识到我引用了旧版本的 SDK (v7.0.0)

    但是、我尝试了文档中链接的步骤、但我卡在没有"logSinkBuf"模块的位置:

    值得一提的是、我仅将 SWO 和 SWD 引脚用于我的 SEGGER j-link 调试器。  

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

    经过相当长的调试会话后、我知道日志模块不会通过 UART 向主机发送完整的消息、而是发送以下3个信息:

    -时间戳

    -指向要打印的消息的指针,其中可以使用发送地址从".out"文件中提取消息的内容

    - 消息的任何参数,如%d 的参数

    然后、我不得不 使用上述信息搜索如何提取这些信息、我 发现 TI 开发的这款工具被称为"记录器":

    /tools/log/tiutils/Readme.html  

    它自动为我提取这些消息。 但使用起来却很麻烦。 遗憾的是、我无法使用"ROV (运行时对象查看器)"、因为它没有显示任何"logSinkBuf"、我想我使用的是"Segger J-link"、而不是 TI 的官方调试器。