请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS570LC4357 主题中讨论的其他器件:HALCOGEN
我使用 https://git.ti.com/cgit/hercules_examples/hercules_examples/tree/Application/LwIP/v00.04.00/LAUNCHXL2-TMS570LC43x 中的演示代码构建了一个应用程序 作为基准。 我制作的应用程序仅使用 LWIP 库(版本1.4.1、作为该版本的演示)中的 TCP/IP 来以大约1kHz 的频率更新"流式传输"数据。 大多数情况在一段时间内都可以正常运行、但最终代码会暂停并卡在 HDK.c 中演示的以下 while 循环中: 
  /* TODO:(这是一种权变措施)等待 EOQ 位被设置... */ 
  while (((EMAC_BUF_DESC_EOQ!=(hdkif_swipze_data (CURR_BD->flags_pktlen)和 EMAC_BUF_DESC_EOQ))); 
我认为这表明 EMAC 试图传输数据(从 DMA)、但出现了问题、EOQ 从未设置、此外 TXHDP 也不会清除、因此 MCU 也会卡在下一个 while 循环中: 
  /* TODO:(这是一种权变措施)在 TXHDP0变为零之前请勿写入*/ 
  while (0!=*((UINT32 *) 0xFCF78600); 
我已经阅读过其他论坛帖子、但似乎我的问题有点不同 、因为 while 循环的时间安排是可以的、而权变措施对我来说是可以的。 但是、由于 EMAC 无法清除 EOQ 位、我不确定在此情况下是否有更好的解决方法。 我假设 Halcogen 代码能够正确地为 DMA 设置 EOP、SOP 和 EOQ 数据包。 是否有 Halcogen/Demo 变通办法的后续修复方法、或者有关 EMAC 如何无法设置 EOQ 和返还所有权的更多信息? 
我不是一个专家通过任何网络和使用 EMAC 或 LWIP ,所以任何建议或有用的信息会很感激. 
有关我的应用程序的一些附加信息(如果有任何帮助)是、我在从 LWIP 调用 tcp_write 以1kHz 的间隔传输数据后专门调用 tcp_output。 对于 LWIP 代码,我使用它的方式似乎没有任何明显的问题。 EOQ 问题会在几分钟内进入数据流、从而使调试变得困难。 如果我流式传输较少的数据、例如每毫秒30字节、它永远不会失败。 但是、一旦我将其增加到大约100-200字节、大约一分钟后它就会失败、会卡在 EOQ while 循环上。 
 
				 
		 
					