工具与软件:
我发布了一个问题、我找不到一个问题、我试图在收集器启动时执行什么操作、您按住 BTN-2以清除 NVRAM、这也会清除 RAM、因为它是在设备首次通电时完成的。 我需要在代码中执行类似的操作、还需要能够清除 ram。 我们会在将来的版本中指出这是一个需要修复的错误、但我现在需要执行此操作。 有没有人可以指出我可以找到的结构,我可以清除自己?
谢谢!
Kevin
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
我发布了一个问题、我找不到一个问题、我试图在收集器启动时执行什么操作、您按住 BTN-2以清除 NVRAM、这也会清除 RAM、因为它是在设备首次通电时完成的。 我需要在代码中执行类似的操作、还需要能够清除 ram。 我们会在将来的版本中指出这是一个需要修复的错误、但我现在需要执行此操作。 有没有人可以指出我可以找到的结构,我可以清除自己?
谢谢!
Kevin
尊敬的 Kevin:
如果在器件启动后调用函数"csf_clearAllNVItems ();"、则会擦除 NV 闪存、但连接的器件的地址仍保留在 RAM 中。 复位器件后、擦除将生效、因为启动时、器件无法恢复先前连接的器件的任何地址。 这不是错误。 如果您要解除设备关联、您有两个选项:
1.调用"csf_clearAllNVItems();"、 然后执行一个重新启动设备的过程 (定时器?)。
2.您可以在运行时按照以下示例移除设备。
如果您要在运行时删除器件、我建议您查看有关删除器件的示例。 因此、您需要在收集器项目(application -> collector)中的"csf.c"文件开头添加以下定义:
#define TEST_REMOVE_DEVICE
使用 BTN-1启动收集器网络后、您可以再次按 BTN-1以删除第一个加入的传感器。
它的实现可以在函数"removeTheFirstDevice()"(第2697行、csf.c)中找到。
函数调用在第754行中实现:
您可以修改 removeFirstDevice 函数来 删除所有设备或您指定的设备、并在代码中将其调用到需要的位置。 这还可以确保未关联的器件不会处于孤立状态。
如果您可以使用两种建议方法之一在运行时删除这些器件、请告诉我。
此致、
等等
尊敬的 Kevin:
您遵循了以下两种解释的方法中的哪一种?您是如何实施的?
如果 清除收集器 NV 闪存然后重新启动、则会出现消息"access denied"。 如果跟踪连接到收集器的传感器之前的网络尝试连接到它(因为它未被清除和重新启动)、收集器将不允许它加入其网络、因为它无法记住它。
如果要使用"csf_clearAllNVItems ();",您必须在收集器和传感器上调用它,然后重新启动设备。
我真的建议您考虑一下从网络中安全删除设备的选项 、下面是"removeTheFirstDevice()"。 如果您使用它从收集器中移除传感器、则传感器之后可以再次加入新网络、并且不会成为孤立网络。
此致、
等等
theo、
我使用了 removeTheFirstDevice()并且仍然有问题。 下面是我在从网络中移除传感器时使用的调用:
//将已解除关联的消息发送到当前已配对的设备、这样它就不会在尝试与其他设备配对后立即重新加入
csf_sendDiscassociateMsg (networkItems.item[0].devInfo.shortAddress);
//网络需要时间来断开关联
Usleep(100000 );
//删除此网络的所有非易失性项目。
csf_clearAllNVItems();
//网络需要时间来清除项目
Usleep(100000 );
//删除在设备列表中找到的第一个设备。
removeFirstDevice();
//网络需要时间来清除活动连接
Usleep(100000 );
//开始快速闪烁
LED_startBlinking (ledHandle[CONFIG_LED_RIGHT]、250、LED_BLINK _FOREVER);
/*指示收集器启动网络*/
formNwkAndUpdateUser();
/*在应用程序线程等待时钟事件时唤醒*/
sem_post (getCollectorSemaphore ());
/*开放网络*/
openCloseNwkAndUpdateUser (true);
/*在应用程序线程等待时钟事件时唤醒*/
sem_post (getCollectorSemaphore ());
Kevin