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.

[参考译文] CC2340R2:AssertHandler 案例不会导致调用 HAL_ASSERT_SPINLOCK

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1460567/cc2340r2-asserthandler-cases-not-result-in-calling-hal_assert_spinlock

器件型号:CC2340R2
主题中讨论的其他器件:SysConfigCC2340R5

工具与软件:

嗨、团队:

我的客户是从基本 BLE 配置文件项目的演示代码开始的。 (SDK 版本8.40)

我们想知道当发生断言并且堆栈或某些库例程调用 AssertHandler 时、是否预计断言处理程序会返回? 在我看来,一个断言被调用的所有原因都是严重的,你会想进入一个 while (1)循环...

在一切都正常的情况下、为什么会发生断言呢?  

我们一直在研究的 AssertHandler 位于 main_FreeRTOS.c 文件中、我们发现大多数情况下不会调用 HAL_assert_SPINLOCK。

此致!

Luke

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

    尊敬的 Luke:

    感谢您发送编修! 我相信一些断言可能可恢复、这就是并非所有断言都旋转锁定器件的原因。 您可以更正的是、如果断言足够严重、则应锁定器件以供进一步分析、但断言应锁定器件、应允许该器件尝试恢复并仅启动复位、这将取决于客户的需求。 例如、在开发期间、旋转锁定所有有效状态可能是有意义的、但在生产期间、最好是对大多数有效状态进行复位、以便使器件快速恢复、同时尽量减少对用户的影响。

    此致、

    1月

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

    您好、Jan:

    感谢详细的答复,这是有意义的! 基于进一步挖掘的后续问题...

    阅读 SDK 文档中的 HAL 断言处理部分后、我确保他们定义了 EXT_HAL_ASSERT 并将 hal_assert.c 添加到其工程中(并再次进行检查后、他们向工程的预处理器符号中添加了 EXT_HAL_ASSERT 和 HAL_ASSERT_SPIN)。

    发生断言时、库代码将调用其回调函数、然后它将执行其回调、该回调将 根据定义的其中一项进行复位或旋转:HAL_assert_reset、 HAL_assert_spin

    HAL_ASSERT_RESET 可以正常工作、但当他们尝试 HAL_ASSERT_SPIN 选项时、他们会收到以下编译器错误:

    iCall_disableMInt ()/ iCall_enableMInt ()是在 ICall.h 中定义的,它包含在他们的项目中,但这不起作用。 这不是编译时问题、而是链接问题... 有什么关于如何解决这个问题的想法吗? 不确定我们是否忽略了这里的一些简单内容。

    谢谢!

    Luke

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

    尊敬的 Luke:

    没问题! 很高兴听到 HAL_ASSERT_RESET 可以正常工作! 关于旋转宏、我对该错误感到有点惊讶。 您能否确认在包含路径中 可以找到 ICall.h 文件? 此外、您能否仔细检查 hal_assert.c/h 文件是否具有 ICall.h 文件的 include?

    此致、

    1月

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

    您好、Jan:  

    是的、我在他们的 hal_assert.c 文件中检查了 icall.h 文件的 include、并确认可以找到该文件。  

    #include "hal_assert.h"
    #include "hal_types.h"
    #include "hal_board.h"
    #include "hal_defs.h"
    #include "onboard.h"
    #include #include #include "iCall.h"

    他们尝试了每种不同的方法来包含该文件、这些方法中的每一种都可以找到并打开 icall.h 文件。 不清楚为什么这些函数没有被正确定义。  

    此致!

    Luke

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

    尊敬的 Luke:

    您能否尝试使用#include "iCall.h"并将 icall.h 文件的本地副本添加到项目的根目录中? 请确保文件是本地副本而不是引用。

    此致、

    1月

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

    您好、Jan:

    运气不好... 我让他们将 icall.h 复制到工程的根目录中、然后他们将这个新文件添加到工程中、仍然会出现相同的错误。 仔细检查以确保它也不是参考。 还有其他想法要尝试吗?

    谢谢!

    Luke

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

    您好!

    我懂了。 在提供的屏幕截图中、看起来他们正在使用 IAR。 作为快速测试、他们能否在 CCS 上尝试在 SDK 示例中启用该定义? 我们可能必须提交一个请求单来解决此问题、如果是这样、当 CCS 上的 SDK 示例发生行为时、它将极大地加快调试速度。

    此致、

    1月

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

    1月、

    他们未安装 CCS 也无法测试此功能。 但是、他们计划在本周晚些时候升级到最新的 SDK、所以、新的库文件也许可以为他们解决这个问题。。 但不确定这是否是问题的原因。

    如果更新能够修复问题、我将向您不断提供最新信息。

    此致!

    Luke

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

    尊敬的 Luke:

    我懂了。 请告诉我新的更新是否可以解决此问题。 :)

    此致、

    1月

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

    嗨、Jan、

    我们使用 基本 BLE 配置文件演示代码来编译面向它们的最新 SDK 和 IAR 版本、因此我能够验证该代码中是否也存在此问题。 它报告的链接错误与我们在其 R2项目中看到的相同。

    步骤:

    使用基本 BLE 配置文件演示代码、并使用 IAR 正确编译。 借助 SysConfig 工具、我只添加了一个 Profile、即 Glucose。

    将 hal_assert.c 文件添加到工程中(C:\ti\simplelink_lowpower_f3_sdk_8_40_00_61\source\ti\ble5stack_flash\hal\common src)

    将 EXT_HAL_ASSERT、HAL_ASSERT_SPIN 添加到 C/C++编译器选项的预处理器中。

    生成全部。

    E 是整个编译输出:

     Basic_ble_profiles_LP_EM_CC2340R5_FreeRTOS_IAR -版本
    正在读取项目节点...

    正在清洁... 51个文件。
    Sys Config_Generated_Files.ipcf
    引导生成文件...

    app_broadcenter.c
    app_central.c
    app_observer.c
    app_glucce.c
    app_simple_gatt.c
    app_cgm.c
    app_ht.c
    app_dev_info.c
    app_pairing.c
    app_peripheral.c
    app_main.c
    app_data.c
    bleapputil_process.c
    bleapputil_init.c
    iCall_user_config.c
    iCall_cc23x0.c
    CRC.c
    app_connection.c
    bleapputil_task.c
    bleapputil_stack_callbacks.c
    HAL_assert.c
    ble_stack_api.c
    TI_FreeRTOS_PORTAL_CONFIG.c
    ti_ble_config.c
    ICall_posix.c
    ti_devices_config.c
    TI_DRIVERS_CONFIG.c
    Util.c
    TI_RADIO_CONFIG.c
    MAIN_freertos.c
    ble_user_config_stack.c
    nvocmp.c
    cgm_server.c
    glucose_server.c
    Osall_iCall_ble.c
    rom_init.c
    DEV_INFO_SERVICE.c
    iCall_api_lite.c
    health_tempt计_server.c
    ble_user_config.c
    glucote_db.c
    menu_module.c
    glucote_profile.c
    cgm_db.c
    cgm_profile.c
    health_temperat计_profile.c
    simple_gatt_profile.c
    TI_FreeRTOS_CONFIG.c
    Basic_ble_profiles_LP_EM_CC2340R5_FreeRTOS_IAR.out
    错误[Li005]:"iCall_disableMInt"无定义[引用自 C:\BASICBLEPROFILES\Release\Obj\common_4012601122558228827.dir\hal_assert.o]
    错误[Li005]:"iCall_enableMInt"无定义[引用自 C:\BASICBLEPROFILES\Release\Obj\common_4012601122558228827.dir\hal_assert.o]

    错误总数: 2.
    警告总数:0
    正在解析依赖项...
    生成失败   

    因此、希望 团队可以轻松地 重新创建。   

    我猜 其中一个 库应该包括 iCall_disalbeMInt ()和 iCall_enableMInt ()函数, 但不包括。   

    谢谢!

    Luke

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

    尊敬的 Luke:

    我已经联系研发部门、了解他们对该功能的支持状态的看法。

    此致、

    1月

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

    不建议使用 HAL 断言、而是将自定义变量(如使用 while (1))添加到断言处理程序中。 HAL 元件主要由栈在内部使用、除非有绝对要求、否则不应在应用程序代码中使用。

    谢谢!
    Luke