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.

[参考译文] CC2640:在启用了 BLE 堆栈2.2.1和 tirtos 2.20.1.8的看门狗计时器的情况下、广播在大约20分钟后停止

Guru**** 2550750 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/577758/cc2640-advertisements-stop-after-about-20-minutes-with-watchdog-timer-enabled-with-ble-stack-2-2-1-and-tirtos-2-20-1-8

器件型号:CC2640

我们有一个应用将 BLE 堆栈配置为每200ms 广播一次。 在添加启用看门狗计时器的代码之前、只要器件已通电、器件就会正确广播。 启用看门狗计时器后、我们看到器件会在大约20分钟后停止广播、堆栈不会生成任何事件。 我们知道看门狗实现似乎设置正确、因为我们可以通过在应用中检测无限循环来强制看门狗超时。 我们还注意到、如果我们禁用睡眠模式、广播不会停止。 我们通过执行 我们在 PowerCC26XX_AK_STANDBY_Late 事件发生时向电源模块注册的函数来"宠物"看门狗计时器。 是否有什么想法会导致这种行为?

驱动看门狗计时器的代码如下(请注意、如果我们将看门狗计时器配置为使用 NMI 或常规 INT、则会发生相同的行为):

#include 
#include 
#include 
#include 
#include 

====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
* 定义*===================================================================================================================================================================================================
/*============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//
#define WDT_TIMEOUT_MS_DEFAULT (5000UL)


/*============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
* 全局变量*========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
/*============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
*/
静态看门狗 CC26XX_Object WDT_object;

/*============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ */
static Watchdog_handle WDT_handle = NULL;/*===========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

*/
静态 const WatchdogCC26XX_HWAttrs WDT_attrs ={
WDT_BASE、
INT_NMI_FAULT、
WDT_TIMEOUT_MS_DEFAULT
};/*====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

*/
const uint_least8_t Watchdog_count = 1;

/*===================================================================================================================================================
驱动程序使用的*//*全局配置结构*/
const Watchdog_Config Watchdog_config[]={
{
fxnTablePtr =&WatchdogCC26XX_fxnTable、
.object = WDT_object (&W)、
hwAttrs =&WDT_ATTRS、
}、
{NULL、NULL、NULL}、
};

/=========================================================================================================================================================================================================================================================================================================================================================================================================================== */
Power_NotifyObj WDT_powerNotifyObj;


/*============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
* 局部函数
=========================================================================================================================================== /*============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//
静态 void
WDT_callbackFxn (uintptr_t args)
{
/*这是在 WDT 中断触发时被调用的函数。
*当然、这种情况绝不会发生、因此如果发生、只需进行记录
*异常级别错误并重置设备。
*
logCode ( ERROR_WDT_TIMEOUT );

返回;
}/*========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================


//
static int
wDT_powerNotifyFxn (unsigned int eventType、uintptr_t eventArg、uintptr_t clientArg)
{
/*只要设备从睡眠状态唤醒,就会调用此函数。
*只需携带 WDT 计时器。
*
WDT_PE();

返回 Power_NOTIFYDONE;
}/====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================



* 公共函数
*======================================================================================================================================================== /*============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//
void
WDT_init (void)
{
Watchdog_Params 参数;

Watchdog_init();

Watchdog_Params_init (params);
params.callbackFxn = WDT_callbackFxn;

WDT_Handle = Watchdog_open (0,params);
assert( WDT_Handle != NULL );

/*在 Watchdog_open 中,看门狗驱动程序库将其设置为 NMI,但它是这样
*似乎未正确插入矢量表的 NMI 条目。
*以下代码执行该操作。 *
Hwi_plug (INT_NMI_FAULT、(void *) WDT_callbackFxn);

/*注册接收从睡眠状态唤醒的通知*/
power_registerNotify (&WDT_powerNotifyObj、PowerCC26XX_WAK_STANDBY_Late、WDT_powerNotifyFxn、0);

/*使用默认超时值启动 WDT */
WDT_PE();
}/===================================================================================================================================================================================================


//
void
WDT_pet (void)
{
Watchdog_clear( WDT_Handle );
}

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

    这可能是一个 TI RTOS 驱动程序问题、我建议尝试使用较新的 TI RTOS 驱动程序、看看这是否有用。

    此致、
    反叛分子