Other Parts Discussed in Thread: CC2530, Z-STACK
Thread 中讨论的其他器件: Z-stack
你(们)好
我们测试的几个器件会在一段时间后卡住。 (CC2530上采用最新 ZStack 3.0.2的 ZED 器件)。
我将 HAL_ASSERT 函数设置为无限循环来检测此类情况。
我能够重现器件卡住的情况、从而确认至少在本例中调用了 HAL_assert。
符号为0,因此 pMacPib->ackWaitDuration 为0。
发生这种情况的地方-屏幕截图显示了 MacPib 的存储器转储以及监视窗口中的变量和该位置之前的变量:

"堆"从0x0FD2开始
pMacPib 指向0x0A27、其中 macPib 被映射:
MacPib 00000A27. Mac_MlmeResetReq (Mac_beacon)
所有内容相等、我执行了复位、并在该位置添加了一个断点、以了解预期的存储器和变量内容。
我必须触发手动中断才能获得以下结果:

我们可以看到、macChipVersion 不为0的随机种子没有回调、表明内存的这一部分已损坏。
我进一步检查了前面的变量、我只会怀疑 dmaCfg 000005FE
相对段、地址:XDATA 000005FE - 00000A0B (0x40e 字节)、ALIGN:
dmaCfg.uartCB 的正常值为0x105F (@0x0AEA、这是应用的回调函数、但在断言失败时不是该值。
这需要 DMA 转换中存在潜在的错误?
相关问题:
查看 uartDMACfg_t 定义,我看到“ uint16 rxBuf[HAL_UART_DMA_RX_MAX];”。
是否需要将 rxBuffer 表示为 uint16、因此占用 HAL_UART_DMA_RX_MAX 空间的两倍? 内存不足(尤其是在 ZNP 中)、这有助于释放一些内存。
注:我假设 rxBuf 的 uint16类型(不幸的是)与 DMA 硬件的工作方式有关...