Other Parts Discussed in Thread: C2000WARE
主题中讨论的其他器件:C2000WARE
是否有人可以确认我对 C2000Ware 版本3.01.00.00中此示例代码的理解?
在 f2838xif.c 中,在例程 f2838xif_transmit ()中,描述符数据指针设置为 pbuf 数据指针:
pktDescPtr ->dataBuffer = q->payload;
f2838xif_transmit ()的调用方随后调用 pbuf_free (),因为调用栈会展开。
这是一个错误、因为这两个事件之间没有同步:
1) 1) DMA 引擎复制存储器
2) 2)释放 pbuf、并由其他一些代码进行后续重用
如果我正确理解 LWIP 的 pbuf 模型、应该做的是 f2838xif 接口层使用 pbuf_ref()递增参考计数、然后以某种方式保存 pbuf 指针、然后当 TX 完成在 f2338xif_process_transmit ()中发生时、恢复 pbuf 指针、并调用 pbuf_free ()。 结果是,无论哪个 pbuf_free ()最后发生,都会导致内存被实际释放,并保证 DMA 访问在它之前。
感谢您的关注和建议。
此致、
镍氢电池