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/66AK2G12:NDK POSIX Pthread RTS SYS/BIOS STDOUT -停留在 main 之前()

Guru**** 2540720 points
Other Parts Discussed in Thread: 66AK2G12, SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/823752/rtos-66ak2g12-ndk-posix-pthread-rts-sys-bios-stdout---stuck-before-main

器件型号:66AK2G12
Thread 中讨论的其他器件: SYSBIOS

工具/软件:TI-RTOS

尊敬的所有人:

首先、我使用的工具:

处理器:66AK2G12

CCS 9.0.0.1.00004

CGT 8.3.4

XDC 3.55.0.11

SYS/BIOS 6.75.2.00

PDK 1.014

NDK 3.60.0.13

我在设置 NDK 时遇到问题。

如果我启用了 NDK 并使用任何类型的打印并额外启用编译器选项--multithread,程序会在 main 之前卡住。

我尝试调试、我发现了以下内容:  

  • 在 std:::cout 初始化期间、会分配一些流缓冲区
  • 这被定向到一个 pthreads 锁  
  • 在访问锁的信号量期间、BIOS_getThreadType 返回的不是任务  
  • 这会导致断言

我创建了一个只在 CCS 控制台上打印的测试项目。 您可以在3种打印模式之间进行选择:

  • XDC System_printf
  • C printf
  • C++标准::cout

只要未设置--multithread 选项,就可以正常运行。 如果我启用它、我将不再有转储、甚至无法到达 main。

我需要帮助来确定问题所在。 我已经尝试将 BIOS.rtsGateType 设置为 GateSwi、但没有完全帮助。

有人可以尝试复制并查看我的 CFG 文件吗?e2e.ti.com/.../demo.zip

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

    Bernhard、

    使用 GCC 7.3.1将 BIOS 与 C++代码结合使用时存在已知问题、此处报告了该问题、可能也会影响您的设置:

    https://e2e.ti.com/support/processors/f/791/p/816940/3032988#3032988

    目前、解决方法是使用 GCC 7.2.1。 您可以从以下位置下载工具链的版本:

    https://github.com/gnu-mcu-eclipse/arm-none-eabi-gcc/releases/tag/v7.2.1-1.1   

    请解压缩此软件包、然后在 CCS 中发现编译器。

    此致、

    Rahul

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

    尊敬的 Rahul:

    如果您看过我提供的测试用例、您就会知道我正在处理 DSP 内核、因此不使用 GCC 编译器。 而是使用 C6000 CGT 8.3.4编译器。 实际上、我从8.2.6开始、然后移动到8.3.4、以查看编译器是否是原因。

    为什么 SYS/BIOS 和 C++不能协同工作? 我们已经在 C6657和66AK2G12上进行了工作设置。

    在 C6657上、我们使用不使用 pthread 的 NDK 2.26。 我们在这方面没有问题。

    仅在66AK2G12上、在添加了最新的 NDK 3.60和 pthread 使用情况后、我才会遇到问题。

    因此、问题可能与 pthread、SYS/BIOS 和 RTS 有关。

    期待收到任何进一步的反馈。

    Bernhard

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

    Rahul、

    我还有一些想法。

    如果不使用 std::cout 进行打印,也会出现问题。 XDC 打印和 C 打印也无法正常工作。 因此、该问题不仅与 C++相关。 我弄错了吗?

    -multithread 编译器选项如何? 如果我不使用它,我就没有问题。 在最终的应用中、我需要它、因为我们有几个任务在运行。

    在-multithread 和 pthread 上是否存在错误行为?

    Bernhard

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

    尊敬的 Rahul:

    我进行了一些进一步的调查、发现这与 POSIX 有着绝对的关系。

    如果我从工程中删除 NDK 依赖项。 配置和 CFG 文件中。 我没有问题。

    如果我通过添加以下行启用 SYS/BIOS 的 POSIX 支持:

    VAR TI_POSIX = xdc.useModule('ti.posix.tirtos.Settings');

    然后问题又回来了。

    "问题"是我无法在 CCS 控制台上打印任何内容。 所有可用的打印输出(System_printf ()、printf ()、std::cout)都不再起作用。

    我真的需要一些帮助来确定正在发生的情况。

    Bernhard

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

    Bernhard、

    最新 SDK 中唯一的 NDK 和 POSIX 变化发生在 ProcSDK 5.01版本中、其中发生了 NDK 2.x 到 NDK 3.x 的迁移:

    http://software-dl.ti.com/targetcontent/ndk/3_40_01_01/exports/ndk_3_40_01_01/docs/ndk/NDK_2_to_3_Migration_Guide.html

    我在 TI RTOS 团队中圈出了一个圈、就 POSIX CIO 支持中的任何更改发表了评论。  作为解决方法,您是否可以使用 UART_printf,以便可以在 UART 上查看调试日志?

    此致、

    Rahul

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

    尊敬的 Rahul:

    感谢您的反馈!

    是的、在我们的 C6657项目中、我们使用没有底层 POSIX 的 NDK2.x 版本。 对于我们在66AK2G12上的新项目、我希望使用最新的 NDK 来拥有新的层、以便轻松使用传输加密。

    遗憾的是、在我们自己的 PCB 上、我们没有 UART。 因此 UART_printf()在这里不起作用。

    我期待各位同事对 POSIX 和 CIO 支持的评论。 感谢您的触发!

    Bernhard

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

    尊敬的 Rahul:

    RTOS 团队是否提供了一些反馈?

    Bernhard

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

    您好、Bernhard、

    我刚刚尝试了您的设置、它似乎可以正常工作。 需要注意的是...我使用的是不同的器件和编译器、因为我现在没有方便使用的 C6000板。 不过、我希望确保我测试的是正确的东西、那么您能否确认我正在测试的内容。 如果是、我将尝试模仿您的设置(例如 CCS 版本、C6000电路板等)

    设置

    CortexM4F 器件  

    TI Arm 编译器

    SYS/BIOS 6.76.02.02  

    CCS 9.1

    示例

    具有以下更改的 bigtime 示例

    1.将 POSIX 添加到.cfg 中(并删除所有信号量、时钟和任务创建)(附在底部)

    2.将主源文件的内容替换为 main.cpp 代码(减去所有 osal 填充)(附在底部)。

    测试用例

    1.请勿使用--multithread 设置:所有三个打印稿(System_printf、printf 和 std:::cout)都将输出发送到 CCS 控制台

    2.具有--multithread 设置:所有三个打印稿(System_printf、printf 和 std::cout)都将输出发送到 CCS 控制台

    /cfs-file/__key/communityserver-discussions-components-files/791/bigtime.cpp

    /cfs-file/__key/communityserver-discussions-components-files/791/bigtime.cfg

    Todd

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

    尊敬的 Todd:

    感谢您观看本演示!

    遗憾的是、当-multithread 处于活动状态时、我仍然可以使用 C6000编译器8.3.4重新生成您的测试用例。

    请查看在到达 main()之前 iostream init 中止的调用栈:

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

    感谢您确认我的示例有相同的问题。 我在这里有一位工程师来复制您的设置。 但可能需要一天或两天的时间。

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

    您好、Bernhard、

    是否可以尝试将以下行添加到.cfg 文件中:

    TLS = xdc.useModule('ti.sysbios.rts.ti.ThreadLocalStorage');
    TLS.enableTLSSupport = true;
    

    在构建工程时、如果您的.cfg 文件中没有这些行、您是否会收到任何警告?

    Jas

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

    尊敬的 Jaskaran:

    我修改了从加载 POSIX 模块

    VAR 设置= xdc.useModule('ti.sysbios.posix.Settings');

    更改为  

    VAR 设置= xdc.useModule('ti.posix.tirtos.Settings');

    根据处理 CFG 文件时的警告。

    是的、你是对的。 有一些链接器警告。 我还没有重新归化。 很抱歉。

    附加的查找 build.log (不含 TLS)。

    在 CFG 文件中使用 TLS 语句时、警告消失。 但同样的问题是:

    请查找最新的 CFG 和 CPP 文件以及随附的构建日志。

    e2e.ti.com/.../bseiz_5F00_test.zip

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

    您好、Bernhard、

    我们确认这是一个问题。 目前、我们建议您不要使用 -multithread 选项。

    Todd

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

    尊敬的 Todd:

    上周我在度假。 因此,答复较晚。

    感谢您的反馈!

    这有哪些缺点? 我认为在我们的项目中必须使用--multithread 选项,因为我们使用多个任务。  

    是否有有关潜在修复的时间表?

    此致、

    Bernhard

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

    很抱歉、我忘记跟进了。

    关于 TI-RTOS、省略--multithread 没有问题。  

    我们没有关于这一问题的估计。

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

    尊敬的 Todd:

    很抱歉我是在度假的。

    -multithread 选项对 RTS 库有何影响?  

    是否真的没有必要在多线程环境中激活它?

    如果我想开始通过 IPC、OpenMP 在 ARM 和 DSP 内核之间交换数据、该怎么办?

    Bernhard

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

    您好、Bernhard、

    我听到一位代码生成工程师的反馈。 下面是他的回答:

    "客户可以删除选项–multithread。  仅在为 OpenCL 或 OpenMP 构建时才需要此功能。"

    Todd