Part Number:CC2530Other Parts Discussed in Thread:Z-STACK
debug后发现问题出在zclGeneral_ScenesInit函数中,最后单步调试是在ScenesInit中执行ScenesRestoreFromNV时花费大量时间,
在zclGeneral_ScenesRestoreFromNV中读ZCD_NV_SCENE_TABLE时,读出来的值是30,底下执行了30次 for循环。问题是设备在网
期间没有给设备发送过Add Scene 的Cmd,这样应该是不会往这个地址的NV写数据的,并且我自己也没有NV的地址与这个一样;
请教一下会是什么原因造成的? (协议栈版本Home 1.2.2a)
Cherry Zhou:
您好我们已收到您的问题并升级到英文论坛,如有答复将尽快回复您。谢谢!
,
YiKai Chen:
我用SampleSwitch在CC2530DK上面測試,並沒有遇到一樣的問題,你有試過沒修改的Z-Stack例程有沒有遇到同樣的問題嗎?
,
Cherry Zhou:
您好,您请参考上一条回复和以下答复:
您可以看下Known Issues and Proposed Fixes E2E thread (Large number of Address Manager Entries Results in Long ZC Startup Times)中的第 20 项。
即使不使用scene table,也会初始化 (与 address tables非常相似)。 也许您可以考虑减少scene table中的最大条目数,ZCL_GEN_MAX_ENEVENes。 否则的话您可能需要进一步优化初始化和 osal_NV 代码。
,
user5031356:
感谢YK的帮助,
我差分了一下没修改的Z-Stack,关于scene 的部分都是一样的,其他地方也不会调用相关的NV地址或者是函数,这个也是生产了1k+才出现了30个,几率比较低。
,
user5031356:
感谢Cherry的分享帖,但是还有疑问,虽然不使用scene也会初始化scene table,但是为什么在zclGeneral_ScenesRestoreFromNV中会从NV中读取到的值是30,正常的话,没使用读出来的值也应该是0吧
,
Cherry Zhou:
好的再帮您问下哈,预计下周工作日给您答复。
,
YiKai Chen:
試試在設備作factory reset時清除一下scene table
,
Cherry Zhou:
您好,只要 ZCD_nV_scen_table 的 zcl_nv_item_init 成功, zclGeneral_ScenesInitNV 应通过 zclGeneral_ScenesSetDefaultNV 将 HDR.numRecs 设置为零。 更改的唯一方法是看下 zclGeneral_ScenesWriteNV 是否被 zclGeneral_AddScene/RemoveScene/RemoveAllScenes/ScenesSave 调用。 您请密切监视 nvGenScenesHdr_t numRecs 属性在何处和何时发生更改。
也可以参考以上工程师的答复。