我也碰到了这个问题。 我使用的是 zigbee 3.0.2 协议栈,然后在文档中建议位置:OSAL.c , osal_start_system 中 osal_run_system(); 后面加上了喂狗:
{
osal_run_system();
// hhh, 2018.11.15 watchDog
#ifdef WDT_IN_PM1
WD_KICK();
#endif
现在现象是:关闭宏(不启动看门狗),程序正常; 打开宏,则程序没有反应(应该是看门狗在不断重启)。
看门狗具体使用方法,和这个一样:
blog.csdn.net/…/70173240
YiKai Chen:
有沒有設置定時事件讓CC2530醒來踢狗
user5798117:
回复 YiKai Chen:
进一步确认是这样的, 对路由没有问题,对协调器,初次烧录后有问题,大约要3~4分钟后恢复正常; 如果正常后,再重启,重新上电都没有问题。 但如果恢复出厂设置,则可烧录现象一致。
怀疑是初次烧录后,某些任务初始化 执行时间过长?
YiKai Chen:
回复 user5798117:
对协调器,初次烧录后有问题、請問是怎樣的问题?
Viki Shi:
看描述判断大概率是设置的问题,参考下这边的例子:daguichen.blog.163.com/…/
user5798117:
回复 YiKai Chen:
初次烧录后, zigbee 协调器模块3~4分钟之内,通过串口 发送消息给模块,模块都没有回应。 3~4分钟后,模块恢复正常,发送串口消息及时回应。
如果不用 看门狗, 则zigbee 协调器模块 启动后就可以发送串口消息给他,协调器模块也正常快速回复。
怀疑,在协调器启动时候,由于需要建立网络,某些任务执行时间可能会超过1秒,然后会被看门狗复位,造成协调器不停启动; 直至某次协调器成功初始化,于是系统恢复正常
YiKai Chen:
起始後設置定時事件讓CC2530醒來踢狗看看
user5798117:
回复 YiKai Chen:
/* If WDT is used, this is a good place to enable it. */
#if defined(WDT_IN_PM1)#if defined( ZDO_COORDINATOR )if (osal_nv_item_len(0X0401)>0)// 不是首次WatchDogEnable( WDTIMX );
#elseWatchDogEnable( WDTIMX );
#endif#endif
‘如果协调器是首次启动,则在组网后再使能 WatchDog, 问题解决。
判断是否是首次启动,用了自定义的nv项目.组网后,就写入0x0401 相应内容。 有没有更优雅的判断是否是首次组网方法?
user5798117:
回复 user5798117:
让串口初始化后,就发出一条消息,可以看到程序不断重启:
FE 07 FF FF FF 00 00
FE 07 FF FF FF 00 00
FE 07 FF FF FF 00 00
FE 07 FF FF FF 00 00
YiKai Chen:
回复 user5798117:
你有沒有起始後設置定時事件讓CC2530醒來踢狗看看?