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.

[参考译文] TMS570LC4357:TMS570LC4357

Guru**** 2391155 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1207966/tms570lc4357-tms570lc4357

器件型号:TMS570LC4357

您好!

我们使用的是 TMS570芯片和 lwip-1.4.1。 我们正被困在 文件 hdkif.c 中的以下代码部分(红色,下面):

/* TODO:(这是一种权变措施)等待 EOQ 位被置位*/
while (EMAC_BUF_DESC_EOQ!=(hdkif_swipze_data (CURR_BD->flags_pktlen)和 EMAC_BUF_DESC_EOQ));
/* TODO:(这是一种权变措施)在 TXHDP0变为零之前、请勿写入*/
while (0!=*((UINT32 *) 0xFCF78600);
CURR_BD->NEXT = hdkif_swimize_TxP (ACTIVE_HEAD);
if (EMAC_BUF_DESC_EOQ ==(hdkif_swipze_data (CURR_BD->flags_pktlen)& EMAC_BUF_DESC_EOQ)){
/*写入标头描述符指针并启动 DMA */
EMACTxHdrDescPtrWrite (hdkif->EMAC_BASE、(unsigned int)(active_head)、0);

}

当我们 telnet 至器件并请求转储数据时、上述 while 循环绝不会退出。 我们 在发送多个数据包后发现了同样的问题。

几年前我确实看到过这样一种说法、即存在一种与我们看到的问题相匹配的种族状况:

TMS570LC4 EMACTransmit ()问题-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

我无法解决这个问题。  是否有人解决或发现了此问题并能够提供修复/解决方案?

谢谢

Malcolm

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

    您好、 Malcolm:

    该示例具有竞争条件问题的权变措施。  

    潜在的竞争条件是、EMAC 可能会在 应用程序通过修补描述符的指针将其他描述符附加到列表之前的瞬间将描述符的"下一个"指针读取为 NULL。 这个 情况由软件应用程序处理、它一直在检查所有 EOP 数据包的缓冲区描述符标志、寻找一个被称为队列结束(EOQ)的特殊标志。  当描述符的"下一个"指针为 NULL 时、EOQ 标志由数据包最后一个描述符上的 EMAC 设置。

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

    谢谢 QJ Wang。 我解决了这个问题。

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

    您好、 Malcolm:

    您能否分享您解决该问题的解决方案?