发现的ZLL例程的一个新问题
现象描述:zll灯设备未被飞比路由器授权,当前zll灯设备和飞比路由器都上电运行,概率性会发生栈溢出。这时既不会接收显示Assoc Cnf Success,也不会接收显示Assoc Cnf fail,设备仿佛处于停机状态。仿真break后,Mon Nov 03, 2014 21:25:25: The stack pointer for stack 'XdataStack' (currently XData:0xFFFF) is outside the stack range (XData:0x0001 to XData:0x0401) ,由于是zll例程存在这个问题,求解决。如果收到Assoc Cnf Success,zll灯设备将复位;如果收到Assoc Cnf fail,液晶会显示输出Assoc Cnf fail。当前发生问题时液晶屏显示TI英文名称和一串数字。
把两个设备上电运行,就会发生堆栈溢出?这个过程中做了什么操作?
能不能详细描述下.
没有做操作,等待程序运行。正常情况是显示一次Assoc Cnf Success复位,这种操作重复1~7次;接着转成显示Assoc Cnf fail 就不再复位了,指示灯闪烁。测试发现有时程序不会运行到显示Assoc Cnf fail 就会象挂死一样。
如果运行正常运行到Assoc Cnf fail ,就按复位到出厂状态键,重新开始新一轮测试。
测试发现挂死的概率还是比较高的。
如果只是由于没接收到路由器“你未认证”的通知而程序貌似没有运行的话,我仿真break后只要没有打出“The stack pointer for stack 'XdataStack' (currently XData:0xFFFF) is outside the stack range (XData:0x0001 to XData:0x0401) ”就非问题,现在break时的提示都是outside了。
测试到挂死这个问题已经解决了。改的比较多,主要开始起作用的改动是,把液晶的显示字符串缩短,大概缩掉了88字节的样子。
现在挂死是不会了(不会break出现'XdataStack' 告警),只是Assoc Cnf fail 还是不能百分百接收到,有时重新复位一下设备,立刻就接收到了。
当前开发工具尚未齐备,后期有时间再研究这个问题。没挂死且是未授权状态,暂时忽略了。
哥们
请教你加一个问题,你在遥控器或网关bridge做TOUCHLINK后将灯拉入网络并成功操作灯。这时你让遥控器或网关再重新上电,还能操作原来的灯吗?遥控器或网关重新上电后需要我们自己手动调用什么函数吗?
@yuanfeng,
复位后不能直接操作,原因在于并没有选中touchlink过的灯,需要先去linktarget表里面选灯,然后再操作。
这个问题比较复杂,不大好说,可以关闭;指针都发表加了校验,等等。