使用的SDK是tirtos_cc13xx_cc26xx_2_21_00_06(因为这个项目启动的比较早,所以使用SDK版本比较旧一点),最近在调watchdog,这个SDK中没有watchdog的example,但watchdog比较简单,只看文档和watchdog.h差不多就知道怎么用了。
在其他example project上修改(rfPacketRx ),写了一个最简单的watchdog测试程序:
main()中创建一个任务,在任务函数先调用Watchdog_init();,然后设置watchdog参数并open watchdog,然后while(1)。 debug时在watchdog中断回调函数中打上断点。 结果跑起来后发现始终没有进入watchdog中断回调函数,debug stop后发现程序也没有在while(1)处运行(感觉像跑飞了)。
Watchdog_Handle watchdogHandle;
void watchdogCallback(uintptr_t unused)
{
/* Clear watchdog interrupt flag */
Watchdog_clear(watchdogHandle);
}
static void rxTaskFunction(UArg arg0, UArg arg1)
{
Watchdog_Params params;
Watchdog_init();
Watchdog_Params_init(¶ms);
params.callbackFxn = (Watchdog_Callback)watchdogCallback;
params.resetMode = Watchdog_RESET_OFF;
watchdogHandle = Watchdog_open(0, ¶ms);
if (watchdogHandle == NULL) {
/* Error opening Watchdog */
while (1);
}
while(1);
}
我有使用最新的SDK进行测试,simplelink_cc13x0_sdk_2_10_00_36,这个SDK中有watchdog example project,测试是可以进入watchdog中断回调函数的。 然后我再SDK的rfPacketRx example project中使用上面的代码和流程进行测试,也是能进入中断的。
对于tirtos_cc13xx_cc26xx_2_21_00_06这版SDK,watchdog中断为何总是进不去??
da qin zheng sheng:
说明新版本比较好啊!
da qin zheng sheng:
中间没有进行喂狗操作?
Viki Shi:
新版本在老版本基础上会有一些更新改进,具体更新内容请查看release note: file:///C:/ti/simplelink_cc13x0_sdk_2_10_00_36/release_notes_simplelink_cc13x0_sdk_2_10_00_36.html
AndyChen:
回复 da qin zheng sheng:
我就是想测一下watchdog超时后能否正常进入中断或复位,所以没有喂狗。
AndyChen:
回复 Viki Shi:
现在用的不是simplelink的SDK,tirtos_cc13xx_cc26xx_2_21_00_06,这版SDK在TI官网上竟然都找不到了。。。
YiKai Chen:
回复 AndyChen:
tirtos_cc13xx_cc26xx_2_21_00_06 可以到 software-dl.ti.com/…/ 下載
Felix ZF:
在tirtos_cc13xx_cc26xx_2_21_00_06中使用WDT应该没有问题的。
下面是我在CC2650上的empty project中加的WDT测试代码,
/*
* ======== main ========
*/
int main(void)
{
Task_Params taskParams;/* Call board init functions */
Board_initGeneral();
// Board_initI2C();
// Board_initSPI();
// Board_initUART();
Board_initWatchdog();/* Construct heartBeat Task thread */
Task_Params_init(&taskParams);
taskParams.arg0 = 1000000 / Clock_tickPeriod;
taskParams.stackSize = TASKSTACKSIZE;
taskParams.stack = &task0Stack;
Task_construct(&task0Struct, (Task_FuncPtr)heartBeatFxn, &taskParams, NULL);/* Open LED pins */
ledPinHandle = PIN_open(&ledPinState, ledPinTable);
if(!ledPinHandle) {
System_abort("Error initializing board LED pins\n");
}PIN_setOutputValue(ledPinHandle, Board_LED1, 1);
Watchdog_Params params;
/* Create and enable a Watchdog with resets disabled */
Watchdog_Params_init(¶ms);
params.callbackFxn = watchdogCallback;
params.debugStallMode = Watchdog_DEBUG_STALL_ON;
params.resetMode = Watchdog_RESET_OFF;
watchdogHandle = Watchdog_open(Board_WATCHDOG0, ¶ms);
if (watchdogHandle == NULL) {
/* Error opening Watchdog */
while (1);
}Watchdog_setReload(watchdogHandle, 1500000);
System_printf("Starting the example\nSystem provider is set to SysMin. "
"Halt the target to view any SysMin contents in ROV.\n");
/* SysMin will only print to the console when you call flush or exit */
System_flush();/* Start BIOS */
BIOS_start();return (0);
}