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.

[参考译文] CC1312R:assert_isTrue ()与 RTOS7 -出现错误或不清除。

Guru**** 2482485 points
Other Parts Discussed in Thread: SYSBIOS, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1206041/cc1312r-assert_istrue-with-rtos7---something-wrong-or-not-clear

器件型号:CC1312R
"Thread:SysConfig"、"SysBIOS"中讨论的其他器件

使用 RTOS7、 simplelink_cc13xx_cc26xx_sdk_6_30_01_03进行工程设计、使用 TI Clang v.2.1.3LTS 和 SysConfig_v1.15进行工程设计。

我使用 assert_isTrue ()来检查几个函数中的错误,例如如下所示:

    // Check if input data mailbox is defined with correct message size
    Assert_isTrue(sizeof(TskFwDnld_InputMbxMsg_t) == Mailbox_getMsgSize(mbxFwDnldTskInput), NULL);

问题是编译器不会为此断言生成代码。 assert_isTrue ()宏在 Assert.h 中定义

#if BIOS_assertsEnabled_D
#if Assert_useBkpt_D
#define Assert_isTrue(c, id) do { \
    if (!(c)) __asm("bkpt #13"); } while (0);
#else
extern void Assert_failX(const char * id);
#if Assert_addFileLine_D
#define Assert_isTrue(c, id) do { \
    Error_PLACE_STR_IN_SECTION(loc, # id " (" __FILE__ ":" Error_STR(__LINE__) ")"); \
    if (!(c)) Assert_failX(loc); } while (0);
#else
#define Assert_isTrue(c, id) do { \
    Error_PLACE_STR_IN_SECTION(loc, # id); \
    if (!(c)) Assert_failX(loc); } while (0);
#endif
#endif
#else
#define Assert_isTrue(c, id)
#endif

未生成断言的原因代码是对于具有断言的模块(.c 文件)  BIOS_assertsEnabled_D  电压。

从 SysConfig 部分 TI_RTOS->BIOS 和 TI_RTOS->Runtime->Assertion_Handling 管理断言。

奇怪的是  BIOS_assertsEnabled_D  由 TI_RTOS->BIOS 段启用、但生效应该有效、并且只能通过 TI_RTOS->Runtime->Assertion_Handling 启用、这种情况不会发生。

云您给了我一个示例、告诉我根据您的 SysConfig 设计人员应如何使用自定义断言。 我是说应该包含什么标头以及在哪里、考虑到可以通过 TI_RTOS->Runtime->Assertion_Handling 添加断言模块来启用断言、而不是通过 TI_RTOS -> BIOS 在 RTOS 中启用断言。   

此致、

Dimitar

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

    在 SysConfig 中、唯一应该做的是启用断言:

    在您的应用中、您需要包括以下内容:

    #include "ti_sysbios_config.h"
    #include <ti/sysbios/runtime/Assert.h>
    

    我在空示例中对此进行了测试、这证明它可以正常工作:

    如果 在 assert.h 之前未包含 ti_sysbios_config.h、则不会生成代码。

    Br

    Siri.

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

    尊敬的 Siri:

    我保证、在当前情况下(SysConfig 当前的工作方式)、我必须 在 assert.h 之前包含 ti_sysbios_config.h、以便我的支持人员工作。 此外、我需要在 RTOS 内启用断言(从 TI_RTOS->BIOS 段)。

    假设未启用从 TI_RTOS->BIOS 段生效(结果是  BIOS_assertsEnabled_D  定义为 false)、但通过 TI_RTOS->Runtime->Assertion_Handling 节添加了断言模块。 问题是、在这种情况下、断言将在哪里工作、 除了附加的断言行为控制(添加线路和 SW BKPT)之外、TI_RTOS -> Runtime->Assertion_Handling 这一节的想法是什么?  

    此致、

    Dimitar

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

    我和 R&D 谈过、他们一致认为文档不是很清晰。

    他们所说的是、SysConfig 中存在限制。  如果添加 assert 模块但禁用了断言、它们将保持禁用状态。 仅当添加并启用了它们时、它们才起作用。

    您是不是在让东西按需工作方面遇到问题、还是只是感觉它的工作方式不清楚。

    如果您无法实现自己想要/需要的功能、请告诉我们、我们将尽力为您提供帮助。

    Siri.

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

    尊敬的 Siri:

    我能够实现我想要的结果。

    我只是想帮我和您(TI)确定在使用 SysConfig 管理资产方面是否有未完成或不明确的事情。
    现在很明显、正如我所认为的、这是一件未完成的工作(定义不明确或存在缺陷)、我可以确定 TI 已经意识到这一点、因此未来将会非常严格地解决这一问题。

    此致、

    Dimitar

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

    尊敬的 Dimitar

    已创建 JIRA 票证以修复此票证:-)

    Siri.