Other Parts Discussed in Thread: CC3351
器件型号: CC3351
我在 SDIO 模式下将 cc33xx_RTOS_MCU_PACKAGE_R8_1 与 CC3351 一起使用、发现了一些与 network_send 函数相关的错误。 第一个示例是指如果要发送的 pbuffer 是链、则分配的内存应具有足够的大小、以便将 pbuffer 链合并为单个连续的内存块。 问题是、在执行此操作时、currentPacket 变量会迭代遍历 pbuffer 列表、直到其值变为 NULL(network_lwip.c 的第 486 行)。 之后、在第 510 行上、代码检查内存是否应释放、并为此使用 currentPacket->payload 的值将其与 buff 的值进行比较。 这会导致存储器引用无效(因为当 pbuffer 是链时、currentPacket 为 NULL)。
第二个问题是、对 network_send 中的 Wlan_Ether PacketSend 函数的调用未考虑 Wlan_Ether PacketSend 可能返回的错误。 最重要的一个是 WLAN_ERROR_TYPE__ENQUEUE、这种情况发生在等待传输到 CC3351 的待处理数据包数量大于或等于 MAX_TX_FRAMES(默认值低得离谱)时。 这些数据包会静默丢弃、导致‑μ s 的‑μ s 订单接收错误、重试或数据包丢失。 可以通过在遇到此错误时执行具有等待期的重试机制来解决此问题、而不是默默地丢弃数据包。
此致、
mg Ing. Sergio A. Lapilli