Other Parts Discussed in Thread: CC2652P7
器件型号: CC2652P7
我们使用 CC2652P7 作为 Zigbee 协调器、需要支持超过 255 个相关器件。 将 NWK_MAX_DEVICE_LIST 设置为任何值≥255 都会导致 协调器在超过 256 个连接的器件后失败、但无法正确处理高于该阈值的关联。 这在 SDK 8.32.00.07 和 几个之前的版本上得到确认。
环境:
-设备:CC2652P7
- SDK:SimpleLink CC13xx/CC26xx SDK 8.32.00.07(在许多以前的版本上也已确认)
- CCS:20.5.0
编译器:TI Arm Clang 4.0.4.LTS
在调查根本原因后、我们发现 libZStack_nwk_all.a 中的 assoc_list.o 是使用 deviceTableIndex_t = uint8_t 进行编译的、这意味着不使用 -DLARGE_DEVICE_TABLE、NWK_MAX_DEVICES≤255。 由于此文件仅作为二进制文件分发、因此无法使用正确的标志对其重新编译。 当应用程序设置 NWK_MAX_DEVICE_LIST = 300 时、该库会静默地将 gNWK_MAX_DEVICE_LIST 读取为 1 字节值、获取 45、而不是 301。 我们在设备上确认了以下内容:调用 AssocAddNew 300 次、只有 45 次成功;AssocCount 也返回 45 次。
该修复程序已存在于 SDK 头文件中:large_device_table 无条件强制 deviceTableIndex_t = uint16_t。 它在构建 出厂库时根本不使用、由于源代码不可用、因此我们无法自行应用它。
我们想问一下是否可以像其他文件(如 Nwk_globals.c)那样访问 assoc_list.c 和 addr_mgr.c 的源文件 或者、使用-DLARGE_DEVICE_TABLE 编译的库变体可以解决该问题。 我们还想标记此标记、以便在未来的 SDK 版本中进行更正。
如果需要、我们可以提供更多详细信息、但以上信息 足以重现和验证您的问题、并确定修复路径。