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.

[参考译文] RTOS/66AK2H12:LOG_Info1 (%s)

Guru**** 2582405 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/629376/rtos-66ak2h12-log_info1-s

器件型号:66AK2H12

工具/软件:TI-RTOS

你(们)好 我正在尝试使用 Log 函数、例如 Log_infoX、Log_WARNX 和 Log_errorX。 当我尝试使用%s 打印规范时,我遇到编译错误:

C:/ti/xdctools_3_50_02_20_core/packages/xdc/runtime/Log__epilogueue.h:129:73:错误:从'const char*'到'XDC_IArg{aka int}'的无效转换[-farger]
MODULE_LOGFXN4 (MODULE_LOGOBJ、(evt)、(MID)、(A1)、(A2)、 (A3)、(A4))

我的测试代码行是:

log_error1 ("系统启动失败:%s\n"、"测试");//e.what());

xdctools 文档对我来说并不是完全清楚哪些转换字符是由各种日志函数支持的。 列出说明符的唯一位置是 Log_print6()之后

我可能会出什么问题?

XDCtools 3.50.02.20、SYS/BIOS 6.50.01.12

Mike

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

    我已将您的疑问转发给软件专家。 他们的反馈应发布在此处。

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

    很抱歉,这家酒店已经搬到我们的房间了。。。。
    我很惊讶这是编译器错误。 我在 CortexM 器件上尝试过它、所以它是不同的编译器、但我收到了一条警告。 可以尝试一下吗?
    log_error1 ("系统启动失败:%s\n"、(IArg")"测试");

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

    您对 IArg 的建议是有效的。

    是的、我还很惊讶地看到编译器错误、而不是警告、但我刚刚再次进行测试、我确实得到了错误。 我使用的是 GNU 4.9.3 (由于多个定义、我似乎无法获得6.3.1来为我工作-另一个问题)。 我得到的错误是:

    错误:从'const char*'到'XDC_IArg {aka int}'的转换无效[-fargeral]

    我将使用此标记作为"已解决"。

    谢谢你。
    Mike
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在进一步审核- Todd 后、您答对了。 我收到警告而不是错误。 编译的代码确实会向 LogBuffer 生成所需的输出。 转换到 IArg 后、不再出现警告、但也中断了输出;字符串数据未包含在缓冲器输出中的%s 中。 再次感谢您的帮助。
    Mike
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很好的悲伤。 再次返回-完整的重建会像以前一样向我提供编译警告、但链接时出现错误(我错误地说在我的初始帖子中是编译错误)。 因此、我仍然无法记录字符串变量。 转换为 IArg 可消除编译警告和链接错误、但不会记录任何数据。
    这是代码行:
    log_info1 ("%s"、"测试");
    同样、链接错误为:
    C:/ti/xdctools_3_50_02_20_core/packages/xdc/runtime/Log__epilogueue.h:129:73:错误:从'const char*'到'XDC_IArg{aka int}'的无效转换[-farger]

    我对它为什么连接和工作一次感到困惑...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    并且一个简单的新测试应用程序可以正常工作。 编译警告、无链接错误、%s 的字符串数据已记录
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Mike、

    该播客显示了什么? 该播客不应改变行为。 您使用的是什么编译器(和版本)?

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的项目链接器变量为:
    '调用:GNU 连接器'
    "c:/ti/gcc-arm-none-eabi-4_9-2015q3/bin/arm-none-eabi-gcc.exe /ti/bios_6_50_01_12/packages/gnu/targets/arm/libs/install-native/arm-none-eabi/lib/fpu /ti/ndk_2_25_01_11/packages/ti/ndk/os/lib -mtune=cortex-a15 -marm -dstoc_k2h -DDEVICE_K2H -D_lit_ENDIAN=1 -g -gdwarf-3 -gstrict-dwarf -Wall -mmd -mp -mfloat-abi=hard -wl、-Map、"controller.map-"-startc-dwarf -specs -md -md -md -md -md -md -md -md -md -md -md -wl、-md -gr -md -gr -md -md -md -gr -md -md -g /packages/gnu/targets/arm/libs/install-native/arm-none-eabi/lib/fpu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    字符文本[236];
    strcpy (text、"test");
    log_info1 ("%s"、(IArg)文本);
    log_info1 ("%s"、(IArg")"test");

    第一行会导致日志缓冲区没有消息数据。 第二行中包含了我所期望和希望的第一行中的单词"test"。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Mike、

    第一个将不起作用。 日志只是存储存储内存地址、而不是实际的 ASCII 字符(因此比 printf 等文件快得多)。 当系统分析器(或 ROV)尝试解码文本地址时、它会在.out 文件中查找该地址、而不是字符串。 而对于地址"test"、第二个可以解析为.out 文件中的 const 字符串"test"。

    这有道理吗?

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

    我认为这是有道理的、但如果无法格式化字符*中的数据、那么 Log_info#()、Log_error#()等的%s 说明符有什么优点? 也许我还没有找到什么? 我的意思是第二种情况非常无用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我同意这是一个令人烦恼的限制。 您可以使用指向多个字符串之一的指针

    if (blah0){ptr ="foo";}
    否则、如果(blah1){ptr ="bar";}
    否则{ptr ="动物园";}
    log_info2 (Diags_User1、"Count =%d、string is %s"、count、ptr);

    有点麻烦、但它提供了一些灵活性。

    要支持动态字符串(例如堆栈上的字符串或分配的内存中的字符串)、会显著改变 Log 模块。 它必须处理 ASCII 字符、这将完全违反 Log 的意图、即软件跟踪、对实时性和占用空间的影响极小。

    Todd