主题中讨论的其他器件:SIMPLELINK-CC13X0-SDK
工具/软件:Code Composer Studio
您好!
我已利用示例代码收集器和传感器来构建定制星形网络。 因此、我一直在尝试重新加入节点/传感器、该节点/传感器在计时器超时后关闭并重新启动到网络、我无法这样做。 计时器超时后是否可以重新加入节点、同时保持其他任务运行?
提前感谢。
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.
工具/软件:Code Composer Studio
您好!
我已利用示例代码收集器和传感器来构建定制星形网络。 因此、我一直在尝试重新加入节点/传感器、该节点/传感器在计时器超时后关闭并重新启动到网络、我无法这样做。 计时器超时后是否可以重新加入节点、同时保持其他任务运行?
提前感谢。
Shubha 您好、
您是否正在使用默认的 SIMPLELINK-CC13X0-SDK v3.20示例、或者是否可以指定所做的更改? 您能否澄清您参考的计时器和任务? http://dev.ti.com/tirex/explore/node?node=AG4DLj1L0Jjd7bzHzKXYXg__eCfARaV__LATEST
此致、
Ryan
您好、Ryan、
我定义了一个类似于跟踪计时器的计时器。 该计时器从跟踪时钟开始。 因此、我定义的计时器不会干扰任何其他计时器。 假设我将超时时间设置为5分钟、只要节点出于任何原因需要重新加入、它只应在5分钟后加入、这是一个周期性计时器。 在这里、在重新加入节点期间、我希望为网络中的其余节点发送跟踪消息。
我已经尝试实施上述操作、它会等待超时、但会保留跟踪消息。 更改在 csf.c 文件的收集器端进行、下面是编辑后的代码。
ApiMac_assocStatus_t CSF_deviceUpdate (ApiMac_deviceDescriptor_t *pDevInfo、
ApiMac_capabilityInfo_t *pCapInfo)
{
ApiMac_assocStatus_t status = ApiMac_deviceStatus_t Success;
ApiMac_memAddr_t AdrAddr_t AdrInfo;ApiMac_assocStatus_t
= Appendr&Adrendr&Adr&Adr&Adr&Adrendr&Adr&Adrmac = App_Adrendr&Adrendr&Adr&Adr&Adr&Adr&Adr&Adr&Adr&Adr&Adr&Adr&Adrmac = App_Adr&Adrendr&Adr&Adr&Adr&Adr&Adr&Adr&Adr&Adr&Adr&Adr&Adr&Adr&Adr&
&pDevInfo->extAddress、APIMAC_SADDR_EXT_LEN);
/*设备是否在黑色列表中? //
if ((findBlackListIndex (&shortAddr)>=0)
||(findBlackListIndex (&extAddr)>=0)
{
//拒绝*
/状态= ApiMac_assocStatus_panAccessDenied;
LCD_write_string_value ("拒绝:"、pDevInfo->shortAddress、16、4)}
否则
{
//保存器件信息*/
LLC_deviceListItem_t dev;
Cllc_Associated_devices_t *pItem;
// pItem = findDevice (&shortAddr);
memcpy (&dev.devInfo、pDevInfo、sizeof (ApiMac_deviceDescriptor_t)));
memcpy (&dev.capInfo、 pCapInfo、sizeof (ApiMac_capabilityInfo_t));
dev.rxFrameCounter = 0;
if (addDeviceListItem (&dev、&newDevice)= false)
{
#ifdef NV_restore
status = ApiMac_assocStatus_panAtCapacity;
LCD_write_string_value ("失败:0x"
、简称"shortInfo")、p16)
#else
status = ApiMac_assocStatus_Success;
lcd_write_string_value ("joined:0x"、pDevInfo->shortAddress、16、4);
#endif
}
否则(TRUE =newDevice){
LCD_write_string_value (“Joined:0x”、pDevInfo->shortAddress、16、4);
}
..........................................................................
/*编辑的代码*/
else {
while (csf_isperiodicTimerActive ()== true)
{
status = ApiMac_assocStatus_panAtCapacity;
}
status = ApiMac_assocStatus_Success;
LCD_write_string_value ("重新加入:0x"、pDevInfo->shortAddress、16、4);
}
}
..................................................................................................
#if defined (MT_CSF)
MTCSF_deviceUpdateIndCB (pDevInfo、pCapInfo);
#endif
//返回加入设备的状态*/
返回(状态);
}
谢谢、此致、
Shubha J
您好、Shubha、
我现在了解您的应用、但您不应使用 while 循环、尤其是在 CSF_deviceUpdate 中。 您应该 认识到器 件正在尝试在 assocIndCb 期间重新加入(通过短地址)、然后启动计时器、而不是调用 cllcDeviceJoiningCB。 然后、您将使用标志和收集器事件等待该计时器过期、然后再允许此特定短地址加入。 但我不明白您为什么要在任何时间内忽略重新连接的器件。
此致、
Ryan