工具/软件:TI-RTOS
我尝试将看门狗功能添加到一个经过大量修改的 sensortag 示例中。
软件版本: BLE SDK 2_02_02_25、TI RTOS 2_21_01_08、BLE 堆栈2-2-2和 CCS 7.4
在我的 board.c 中、我有:
#if defined (_TI_Compiler_version__) #pragma DATA_SECTION (Watchdog_config、".const:Watchdog_config") #pragma DATA_SECTION (watchdogCC26XHWAXWAttrs、".const:dogDogDogWATTRST") #endif WatchDogCC26XX_Object (看门狗 CC26XHWD_TOW26XWCC26XHCC26XHOT_TOWCC26XX_TOWCC26XHOT[CC26XHOT]、"CC26XHOTCC26XDogDog_TOWDOT = CC26XX_TOWDON)#ENDON_TOW26 { baseAddr = WDT_BASE、 .intNum = INT_NMI_FAULT、/* INT_WDT_IRQ 或 INT_NMI_FAULT? * .reloadValue = 3000 /*以毫秒为单位重新加载值*/ }、 }; const Watchdog_Config Watchdog_config[]={ { fxnTablePtr =&WatchdogCC26XX_fxnTable、 .object =&watchdogCC26XX 对象、// CC2650STK_WATCHDOG0 */ hwAttrs =&watchdogCC26XXHWAttrs /* CC2650STK_WATCHDOG0 * }、 {NULL、NULL、NULL}、 }; const uint_least8_t Watchdog_count = CC2650STK_WATCHDOGCOUNT;
在我的应用中:
#define WDT_MS 3000 void watchdog_callback (UArge handle){ Watchdog_clear ((Watchdog_handle) handle); } void watchdogtimer_init (){ Watchdog_Params wdParams; uint32_t tickValue; //打开看门狗 Watchdog_init(); Watchdog_Params_init (wdParams); wdParams.resetMode = Watchdog_reset_on; wdParams.debugStallMode = Watchdog_debug_star_on; wdParams.callbackFxn =安全装置回调; wdtHandle = Watchdog_open (Board_watchdog、&wdParams);// CC2650STK_WATCHDOG0 tickValue = Watchdog_convertMsToTicks (wdtHandle、WDT_MS); Watchdog_setReload (wdtHandle、tickValue); } 在主任务 init 中,我成功调用了: watchdogtimer_init ();
3秒后(WDT_MS 3000)出现硬件异常、操作系统正在旋转:
/*如果没有插入异常处理程序,请在此处旋转*/ while (Hwi_excHandlerFunc = NULL){ ; }
我已经尝试了 e2e 中的一些东西、但没有一个对我有用:
- 已应用此处提到的修复程序: https://e2e.ti.com/support/legacy_forums/embedded/tirtos/f/355/t/532111
- Watchdog_reset_off 而不是 Watchdog_reset_on
- INT_WDT_IRQ、而不是 INT_NMI_FAULT ->然后器件在3秒后重新启动、而不是在"未处理"硬件异常中旋转->然后、它看起来像不会及时触发 wathdog
- 修改 WatchdogCC26XX.c 驱动程序以使用 INT 而不是 NMI、如下 所述:https://e2e.ti.com/support/legacy_forums/embedded/tirtos/f/355/t/532111