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.

[参考译文] CC2652R7:CoAP 消息

Guru**** 2460850 points
Other Parts Discussed in Thread: SIMPLELINK-CC13XX-CC26XX-SDK, CC2652R7

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1246206/cc2652r7-coap-messaging

器件型号:CC2652R7
Thread 中讨论的其他器件:SIMPLELINK-CC13XX-CC26XX-SDK

大家好!

目前、我们的 CoAP 服务器正在运行、并且 CoAP 客户端 GET 请求正在正常运行。
但是、在经过特定数量的 CoAP 客户端请求和时间后、我们会遇到错误。
为了处理此错误、我们放置了一个 while 循环、以查看它是否会获得指向消息缓冲区的指针。
我们不断得到(消息== NULL)、且循环永远不存在。
即使我们从应该执行 CoAP 客户端请求的函数返回、并再次输入该函数以发送消息
它未能这样做。 我们将保留默认设置。 因此、我们假定这可能是因为没有可用的消息缓冲器。
在 CoAP 客户端请求中尝试使用 otMessageFree (),我们在 CoAP_HandleResponse ()回调中尝试也没有成功。

问题可能是什么、我该如何解决?

otMessage *消息= NULL;

消息= otCoapNewMessage ((otInstance *) OtInstance_Get ()、NULL);
if (message == NULL)
{
   //处理错误
  while (消息== NULL)
 {
     消息= otCoapNewMessage ((otInstance *) OtInstance_Get ()、NULL);
 }


此致、
洛根·贝克尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Logan:

    您正在使用哪个版本的 SIMPLELINK-CC13XX-CC26XX-SDK、并且正在评估哪些 TI-OpenThread 示例?  请提供客户端和服务器配置的详细信息、以及对默认工程设置所做的任何更改。

    此致、
    瑞安

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、
    非常感谢您的观看。
    我正在使用 simplelink_cc13xx_cc26xx_sdk_6_40_00_13。

    使用2个示例进行初始功能测试:
    -------------------------------------------------------
    1.DOOR_LOCK_LP_CC2652R7_tirtos7_gcc (默认设置:作为 CoAP 服务器运行)
    2. CLI_FTD_CC2652R7_tirtos7_gcc (默认:设置线程网络并作为 CoAP 客户端运行)


    遵循的步骤:
    ----------------
    1.从 Door_lock 示例中提取 CoAP 服务器功能。
    2.从 CLI_FTD 示例中提取 CoAP 客户端功能。
    3.将 CoAP 客户端集成到 Door_lock 示例中。 [CoAP 服务器已移除]
    4.将 CoAP 服务器集成到 CLI_FTD 示例中。   [未使用 CoAP 客户端]


    命名约定:
    ----------------
    1. device    -> door_lock 示例:运行 CoAP 客户端代码。
    2.控制器-> CLI_FTD 运行线程网络和 CoAP 服务器代码的示例。


    系统设置:(设备和控制器)
    ----------------
    1.控制器设置 Thread 网络并启动 CoAP 服务器。 [仅1个服务器资源]
    2.该设备被调试到控制器线程网络中。
    3.设备每2秒启动一次 CoAP 向控制器(CoAP 服务器)发出一次请求


    CoAP GET 请求的消息模型:
    -------------------------------------------------------
    1.设备初始化可确认 CoAP GET 请求消息。 在传输之前、数据会附加到此 CoAP 消息中。
    (例如{"data_1":20120010、"data_2":"一些字符串信息"、"data_3":"一些字符串信息"})

    2.控制器接收数据并回复特定设备的消息。
    (例如{"device_1_data_1":20120010、"device_1_data_2":"某些字符串信息"、"device_1_data_3":"某些字符串信息"})


    如果您需要更多信息、请告诉我。

    此致、
    洛根·贝克尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您对设置的完整描述。

    将 CoAP 客户端集成到 Door_lock 示例中。 [CoAP 服务器已删除]

    您能解释一下做出这一决定的原因吗?  TI 不支持将 DOOR_LOCK 示例作为 CoAP 客户端 、因为该方向对于 Thread 应用没有意义。  根据迁移过程、可能会出现配置问题。  总体而言,建议对 Thread 上的 Matter 进行评估 ,以用于此类应用工作。  请确定此 E2E 主题是否 相关。

    此致、
    瑞安

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    相关示例、请参阅 simplelink_cc13xx_cc26xx_sdk_6_40_00_13/examples/rtos/LP_CC2652R7/thread/Door_lock

    器件内部 Doorlock.c 文件中、您将找到我在这里引用的 CoAP 服务器功能。
    不过、DOOR_LOCK 示例不用作 CoAP 客户端。 我已经将其实现为 CoAP 客户端、到目前为止适用于已经连接到服务器的2个设备。

    Matter over Thread 已经试过、但由于复杂性和嵌入式 Linux 处理器的要求、这成本太高。 我们保留了它、以便在下游使用它。 我们的截止日期很紧、可在几个月内交付产品。

    此致、
    洛根·贝克尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我们同意默认情况下 DOOR_LOCK 示例是 CoAP 服务器。  为什么需要将其用作 CoAP 客户端?  这种实施与应用程序的使用不一致、将 CLI FTD 用作 CoAP 客户端更为合理(请注意、CLI 可以是两种实施方式)。  

      随着 Thread 堆栈产品与 Matter 解决方案进一步集成、它将得到简化。  TI 的下一次 堆栈更新可能不包含应用示例(如 DOOR_LOCK)、因为 Matter 预计 将担任该角色。  是否考虑过 Zigbee?  它还是一种长期使用的网状网络解决方案、具有既定的应用层(即 Zigbee 集群库或 ZCL)、并可使用 Zigbee 网关连接到物联网。

    此致、
    瑞安

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    根据规范、它以这种方式实现。
    感谢您的参与。 稍后将考虑这一点。
    我们已明确指出了导致 CoAP 消息传递出现很多问题的问题:
    错误= otMessageAppend (message、data、strlen (data));
    错误返回 OT_ERROR_NO_BUFS
    尝试调用 otMessageFree (message)以处理提到的错误,
    在 OT_assert 处的方法中阻止 coap.cpp 内的代码:

    空响应队列:ResponseMetadata:ReadFrom (常量消息&aMessage)
    {
       uint16_t length = aMessage.GetLength ();

       ot_assert (length >= sizeof (*这));
       IgnoreError(aMessage.Read(length - sizeof (*this),*this);


    我希望您能获得有用的信息来解决此类问题。
    也许是处理和阻止消息缓冲器增长的一种方法
    更多寄生效应。

    此致、
    洛根·贝克尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是一个很棒的调试步骤、我建议您在该错误处断点、以便进一步了解调用栈和变量。  您将在 radio.c 中发现、 OT_ERROR_NO_bufs 通常与 rfCoreFindEmptyShortSrcMatchIdx 或 otPlatAddSrcMatchEntry 未找到空条目、  二者可分别在 otRadioAddSrcMatchShortEntry 或 otPlatAddRadioAddSrcMatchExtEntry 期间找到。  您可以尝试增加  radio.h 中的 platform_radio_SHORTADD_SRC_MATCH_NUM 和 platform_radio_EXTADD_SRC_MATCH_NUM、或恢复出厂设置。  但我认为加入网络的设备不是很多、因此您需要确定如何  从应用程序中清除未使用的条目、即 otPlatRadioClearSrcMatchShortEntry 和 otPlatClearRadioSrcMatchExtEntry。

    此致、
    瑞安