CC2541 BLE_Bridge多任务环境下启用看门狗仍然会死机,测试看门狗能正常复位,但只要喂狗的任务未死机,其它任务死机了,整个蓝牙就不可被搜索了,解决一个问题又冒出来一个问题,但TI未公布全部的协议栈源码,有些任务不可追踪,任务如下:
const pTaskEventHandlerFn tasksArr[] =
{
LL_ProcessEvent, // task 0
Hal_ProcessEvent, // task 1
HCI_ProcessEvent, // task 2
#if defined ( OSAL_CBTIMER_NUM_TASKS )
OSAL_CBTIMER_PROCESS_EVENT( osal_CbTimerProcessEvent ), // task 3
#endif
L2CAP_ProcessEvent, // task 4
GAP_ProcessEvent, // task 5
GATT_ProcessEvent, // task 6
SM_ProcessEvent, // task 7
GAPRole_ProcessEvent, // task 8
GAPBondMgr_ProcessEvent, // task 9
GATTServApp_ProcessEvent, // task 10
SerialInterface_ProcessEvent, // task 11
BLE_Bridge_ProcessEvent // task 12
};
//初始化WatchDog函数为:
void InitWatchdog(void){ halIntState_t _sReg; HAL_ENTER_CRITICAL_SECTION(_sReg); WDCTL = 0x00; //打开IDLE
WDCTL &= ~(BV(0)|BV(1));//1s复位 WDCTL |= BV(3); //开启watchdog模式
HAL_EXIT_CRITICAL_SECTION(_sReg);
}
喂狗函数为:
void FeedWatchDog(void)
{
halIntState_t _sReg; HAL_ENTER_CRITICAL_SECTION(_sReg); WDCTL = (0xA0 | WDCTL & 0x0F); WDCTL = (0x50 | WDCTL & 0x0F); HAL_EXIT_CRITICAL_SECTION(_sReg);
}
喂狗函数在OSAL.c文件的void osal_start_system( void )的死循环中调用,发命令进入死循环,测试看门狗可以正常复位,但用Andrio APP在多次连接后不能发现蓝牙设备了,即WatchDog未起作用,因为osal_start_system函数一直在循环喂狗,其它 线程死掉了,osal_start_system仍在喂狗,此时WatchDog就不起作用了,TI也没公开全部的源代码,无法监测其它任务的活动状态。请问TI技术支持,有什么好的解决办法?
VeryBoy:
有没有人能解决这个问题呀?项目比较急于推出…
VeryBoy:
回复 VeryBoy:
顶一下,别沉下去了。
关东糖:
回复 VeryBoy:
建议使用硬狗。软狗协议栈运行时会受到POWER SAVING影响。
VeryBoy:
回复 关东糖:
没有用到POWER SAVING