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.

[参考译文] TMS570LS3137:添加到 TX 描述符列表时出现问题

Guru**** 2601915 points
Other Parts Discussed in Thread: TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/684971/tms570ls3137-problem-appending-to-tx-descriptor-list

器件型号:TMS570LS3137

自我上次发表以来已经六个星期了,没有任何答复。  我回来询问这个问题、因为我的权变措施有局限性。  为什么这个帖子被锁定而没有提供响应?

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

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

    嗯... 我是希望在此处复制上一帖子的信息、还是可以在此处回复?

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

    您好、Tom、

    您可以尝试 lwip 演示中使用的代码吗? 文件是 attachede2e.ti.com/.../2526.emac.c

     /*首次用填充的 BD 写入 HDP */

     if (txch->active_tail =NULL){

      /*SAFETYMCUSW 439 S MR:11.3 "存储在指针中的地址作为 int 参数传递。 -根据 MISRA"*进行咨询

      /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/    

      EMACTxHdrDescPtrWrite (hdkif->EMAC_BASE、(uint32)(ACTIVE_HEAD)、(uint32) EMAC_CHANNELNUMBER);

     }

     /*

     *将 BD 连接起来。 如果 DMA 引擎已经到达链的末尾、

     *将设置 EOQ。 在这种情况下、应再次写入 HDP。

     *

     否则{

      /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/  

      CURR_BD = txch->ACTIVE_TAIL;

      /*等待 EOQ 位被置位*/

      /*SAFETYMCUSW 28 D MR:NA "硬件状态位读取检查"*/

      /*SAFETYMCUSW 134 S MR:12.2. "LDRA 工具问题"*/

      /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/  

      while (EMAC_BUF_DESC_EOQ!=(EMACSwizleData (CURR_BD->FLAGS_pktlen)& EMAC_BUF_DESC_EOQ))

      {

      }

      /*在 TXHDP0变为零之前不要写入它*/

      /*SAFETYMCUSW 28 D MR:NA "硬件状态位读取检查"*/

      /*SAFETYMCUSW 134 S MR:12.2. "LDRA 工具问题"*/

      while ((((uint32) 0U!=*((uint32 *) 0xFCF78600U)))

      {

      }

      /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/  

      CURR_BD->NEXT =(EMAC_TX_BD_t *) EMACSwizleData ((UINT32) ACTIVE_HEAD);

      /*SAFETYMCUSW 134 S MR:12.2. "LDRA 工具问题"*/

      /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/    

      if (EMAC_BUF_DESC_EOQ =>(EMACSwizzleData (CURR_BD->FLAGS_pktlen)& EMAC_BUF_DESC_EOQ)){

       /*写入标头描述符指针并启动 DMA */

       /*SAFETYMCUSW 439 S MR:11.3 "存储在指针中的地址作为 int 参数传递。 -根据 MISRA"*进行咨询

       /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/      

       EMACTxHdrDescPtrWrite (hdkif->EMAC_BASE、(uint32)(ACTIVE_HEAD)、(uint32) EMAC_CHANNELNUMBER);

      }

     }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    演示代码经过测试并被许多用户使用、我们看不到比赛问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、QJ Wang、

    我不想尝试此演示代码、因为它不能执行 TRM 所说的硬件可以执行的操作。
    TRM 表示可以将描述符列表附加到。 接着说、这可能会产生竞态条件、如果 EOQ 被置位、您应该向 HDP 写入数据。
    您提供的演示代码不执行此操作。 它会检查 EOQ 并写入 HDP (如果置位)。 但在进行此检查之前、它等待 EOQ 条件。

    这似乎是一个清晰的补丁、因为如果您之前等待 EOQ、则没有理由检查 EOQ。
    如果等待上一个列表完成,则会启动新列表,而不是附加到现有列表。
    看到 HDP 也与0相比较很有趣。 请说明这一点、因为 TRM 中没有提到需要这样做。

    我希望得到一个关于这一点的直接答案、因为我觉得您在围绕硬件问题进行文字游戏。
    我是否可以实际附加到列表?
    或者、我是否必须等待当前列表完成?

    谢谢、

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

    很抱歉、我没有时间进行此类测试。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、QJ Wang、

    我对您的回答感到困惑、因为我不要求您进行任何类型的测试。

    我有以下问题仍未得到解答:

    您提供的示例代码为什么等待 TX0HDP 为0? TRM 没有提到需要这样做、因此我想理解这一点。

    是否可以附加到 TX 描述符列表? 如果是、如何实现? TRM 表示这是可能的、但我无法可靠地做到这一点。 提供的示例代码等待任何先前的传输完成、因此不会附加到列表中。

    谢谢、

    Tom

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

    您好、Tom、

    可以、您可以在现有列表中附加一个新的 TX 描述符。 此新描述符必须为 NULL 终止。  

    如果下一个描述符指针为零、则当前缓冲区是队列中的最后一个缓冲区。 在将描述符添加到活动发送列表之前、SW 应用程序必须设置此值。

    pNext 的值不应在描述符位于活动的发送队列中时改变、除非其当前值为 NULL。 如果 pNext 指针最初为 NULL、并且需要排队等待发送的数据包更多、软件应用程序可能会更改此指针、以指向新附加的描述符。

    EMAC 将使用新的指针值并继续执行下一个描述符、除非 pNext 值已经被读取。 软件可以通过检查队列结束(EOQ)条件标志来检测这种情况。 当检测到 EOQ 时、应用程序可能会提交新的列表(TX0HDP=0)。

    说实话、我没有测试在链接列表中添加新描述符的功能。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    收到自动消息、询问这是否解决了我的问题。 只需回复此电子邮件、它就无法解决我的问题。 提供了示例代码、TI 复制了问题。 等待 TI 团队的调查结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tom、

    我执行了 EMAC 环回测试。 一个数据包被附加到一个现有数据包中、并且附加的数据包被成功传输。 附件是我的测试项目(CCS)。

    接收到的数据包位于0x08001500 (现有数据包)和0x08001AEA (附加)。

    现有数据包:总长度为470、每个缓冲区为94字节。

    附加的数据包:总长度为470、每个缓冲区为94字节。 但有效载荷是不同的。

    e2e.ti.com/.../5657.TMS570LS3137_5F00_EMAC_5F00_LPBK_5F00_PacketAppend.7z

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

    您好 QJ、

    附加到列表的想法是允许软件向 EMAC 添加消息而不停止软件。  因此、附加到列表中包含两个部分。  第一部分是将新数据包添加到缓冲区描述符列表中。  你已经指出了这个部分。  第二部分是根据需要更新标头描述符指针。  如果需要、对于不停止软件的想法很重要。  如果软件需要等待/停止当前列表完成、则添加的数据包只是一个新的数据包、而不是一个附加的数据包。

    如果您在第1517行只看到几行、您可以看到该行在当前列表完成之前停止软件。  根据 TRM、这不是必需的、因此为什么这条线会出现?  在1530行下面再看几行代码、代码会检查硬件是否仍在处理列表。  这是根据 TRM 进行的、以确保添加的数据包数据添加到列表后硬件仍在运行。  此处的想法是、如果硬件已完成现有列表、则需要重新启动硬件以处理新数据。  如果硬件仍在运行、则当硬件到达列表中的那一点时、应处理添加的数据。

    我复制了以下相关代码行。  有关的行以绿色突出显示、而我的问题和评论以红色突出显示。

    /*
    *将 BD 连接起来。 如果 DMA 引擎已经到达链的末尾、
    *将设置 EOQ。 在这种情况下、应再次写入 HDP。
    *
    否则{
    /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/
    CURR_BD = txch->ACTIVE_TAIL;
    /*等待 EOQ 位被置位*/
    /*SAFETYMCUSW 28 D MR:NA "硬件状态位读取检查"*/
    /*SAFETYMCUSW 134 S MR:12.2. "LDRA 工具问题"*/
    /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/

    为什么这里会这样呢?  TRM 没有提到这一点。

    while (EMAC_BUF_DESC_EOQ!=(CURR_BD->FLAGS_pktlen & EMAC_BUF_DESC_EOQ))



    /*在 TXHDP0变为零之前不要写入它*/
    /*SAFETYMCUSW 28 D MR:NA "硬件状态位读取检查"*/
    /*SAFETYMCUSW 134 S MR:12.2. "LDRA 工具问题"*/

    为什么这里会这样呢? TRM 中未提及这一点。

    while ((((uint32) 0U!=*((uint32 *) 0xFCF78600U)))


    /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/
    CURR_BD->NEXT = ACTIVE_HEAD;
    /*SAFETYMCUSW 134 S MR:12.2. "LDRA 工具问题"*/
    /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/

    TRM 中提到了这种检查、但由于我要询问的上述代码、检查将始终为真。

    if (EMAC_BUF_DESC_EOQ =>(CURR_BD->FLAGS_pktlen & EMAC_BUF_DESC_EOQ)){
    /*写入标头描述符指针并启动 DMA */
    /*SAFETYMCUSW 439 S MR:11.3 "存储在指针中的地址作为 int 参数传递。 -根据 MISRA"*进行咨询
    /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/
    EMACTxHdrDescPtrWrite (hdkif->EMAC_BASE、(uint32)(ACTIVE_HEAD)、(uint32) EMAC_CHANNELNUMBER);

    此致、

    Tom

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

    附加到列表的目的是能够添加新的数据包信息而不会停止软件。 您的示例添加了附加信息、但软件停止。 我的问题的中心是代码、与您显示要添加的数据包数据的位置稍微远一点。 下面添加了此代码以及行号以供参考。

    第1507行的注释显示"如果 DMA 引擎"、这与 TRM 一致。
    第1517行显式等待、与第1507行"如果"注释相矛盾。 TRM 中未指定此等待、因此为什么要进行此等待?
    TRM 中未指定第1523行、为什么要执行该操作?
    第1530行由 TRM 指定、与1507处的注释匹配。 但是、如果您在1517等待、为什么要进行检查?

    在1530行不正确的情况下、添加列表的主要目的是让系统正常工作。 但第1517行会将软件延迟到1530为真。


    00001506/*
    00001507 *将 BD 连接起来。 如果 DMA 引擎已经到达链的末尾、
    00001508 *将设置 EOQ。 在这种情况下、应再次写入 HDP。
    00001509 */
    00001510 else{
    00001511 /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/
    00001512 CURR_BD = txch->ACTIVE_TAIL;
    00001513. /*等待 EOQ 位被置位*/
    00001514 /*SAFETYMCUSW 28 D MR:NA "硬件状态位读取检查"*/
    00001515 /*SAFETYMCUSW 134 S MR:12.2. "LDRA 工具问题"*/
    00001516 /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/
    00001517. while (EMAC_BUF_DESC_EOQ!=(CURR_BD->FLAGS_pktlen & EMAC_BUF_DESC_EOQ))
    00001518 {
    00001519}
    00001520 /*在 TXHDP0变为零之前不要写入它*/
    00001521 /*SAFETYMCUSW 28 D MR:NA "硬件状态位读取检查"*/
    00001522 /*SAFETYMCUSW 134 S MR:12.2. "LDRA 工具问题"*/
    00001523 while ((((uint32) 0U!=*((uint32 *) 0xFCF78600U)))
    00001524 {
    00001525}
    00001526 /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/
    00001527 CURR_BD->NEXT = ACTIVE_HEAD;
    00001528 /*SAFETYMCUSW 134 S MR:12.2. "LDRA 工具问题"*/
    00001529 /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/
    00001530 if (EMAC_BUF_DESC_EOQ =>(CURR_BD->FLAGS_pktlen & EMAC_BUF_DESC_EOQ)){
    00001531 /*写入标头描述符指针并启动 DMA */
    00001532 /*SAFETYMCUSW 439 S MR:11.3 "存储在指针中的地址作为 int 参数传递。 -根据 MISRA"*进行咨询
    00001533 /*SAFETYMCUSW 45 D MR:21.1 "此驱动程序中分配了有效的非 NULL 输入参数"*/
    00001534 EMACTxHdrDescPtrWrite (hdkif->EMAC_BASE、(uint32)(ACTIVE_HEAD)、(uint32) EMAC_CHANNELNUMBER);
    00001535}
    00001536}


    此致、

    Tom
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉、基本上是重复的帖子。 我没有注意到第一份答复转到了另一页,以为它已被删除。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Tom、

    示例代码将新描述符附加到描述符列表中、然后将附加部分提交到 HDP 以进行传输。 我评论了以下几行:
    // while (EMAC_BUF_DESC_EOQ!=(CURR_BD->FLAGS_pktlen & EMAC_BUF_DESC_EOQ))
    // while ((((uint32) 0U!=*((uint32 *) 0xFCF78600U)))

    代码工作正常。 老实说,我很清楚为何在这里增加这两条线,以迫使新的 HDP 进程。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    第一个数据包太小、无法产生我的问题。  请将第一个数据包的大小增加到最大数据包大小。  我没有时间了解您的整个测试案例、但我能够验证它没有达到我的条件。

    谢谢、

    Tom

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

    我不清楚为什么在这里添加这两行以强制执行新的 HDP 进程。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Tom、

    我进行了另一项测试:
    第一个现有数据包:数据包长度为1500字节、5个片段、每个缓冲区长度为300字节
    附加的数据包是:数据包长度为1500字节、5个片段、每个缓冲区长度为300字节

    RXED 数据(第一个数据包+附加数据包)等于 TXED 数据。 HDP 只被写入一次:第一个描述符的指针。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    QJ、

    我不能调和你告诉我的事情。


    我已经完成了您提供的项目。 我注释了 emac.h 第76行以删除回送模式。 我使用 Wireshark 捕获线路上的数据、并得到以下结果。
    否 时间 源 目的 协议长度信息
    1 0、000000 LogicPro_03:A6:6c 广播 LLC 470
    2 0.000001 LogicPro_03:A6:6c 广播 LLC 470
    3 0.000002 LogicPro_03:A6:6c 广播 LLC 600
    4 0.000003 LogicPro_03:A6:6c 广播 LLC 470
    这些数据包大小与 SYS_MAIN 中设置的值相关、但我不知道为什么470字节的数据包会发生三次。


    然后、我更改了代码以注释掉 EMAC.c 1517和1523、并得到以下结果。
    否 时间 源 目的 协议长度信息
    1 0、000000 LogicPro_03:A6:6c 广播 LLC 470
    2 0.000016 LogicPro_03:A6:6c 广播 LLC 470
    3 0.000029 LogicPro_03:A6:6c 广播 LLC 600
    4 0.000041 LogicPro_03:A6:6c 广播 LLC 470
    再说一次、我不知道为什么470字节的数据包会发生三次、但两个数据包都在这里。


    然后、我将第一个数据包的大小加倍、得到以下结果。
    否 时间 源 目的 协议长度信息
    1 0、000000 LogicPro_03:A6:6c 广播 LLC 940)
    无第二个数据包。


    使用 Wireshark 并不依赖解释、因此我很确定这里存在问题。 也许问题与我的驱动程序的问题相同、也许是这个特定测试案例的问题。


    请重新检查您的测试和验证。


    此致、

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

    在播放您的代码时、我注意到代码最终出现在一个名为 EMACTxIntHandler 的模块中。 供参考、我的代码不使用中断来为以太网提供服务。

    我还找到了额外470字节数据包的来源。 它们是在 EMACTransmit 函数中添加的附加数据包。 我认为 sys_main 中的第二个数据包是附加的数据包。 我没有意识到附加的数据包被添加到 EMACTransmit 中。 因此、似乎测试应该发送总共4个数据包、其中附加的数据包为470字节、另外两个数据包大小在 sys_main 中定义。 SYS_MAIN 中的其中一个数据包的长度也为470字节、这是巧合。

    所以现在解释了额外的数据包、但仍然没有解释为什么在我之前的答复中、940字节数据包之后只有一个数据包。

    禁用中断时更容易检查此问题、并且还会与我们使用器件的方式保持一致。 您能否为测试用例禁用中断。



    谢谢、

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

    是的,我在 EMACTransmit()中添加了用于附加另一个数据包的代码。 两个数据包的长度均为1500字节。 我通过将引脚1 (TX+)和引脚3 (RX+)交叉、并将引脚2 (TX-)和引脚6 (RX-)交叉来创建一个环回插头。 使用环回、我可以验证接收到的数据是否等于发送的数据。 我没有使用 Wireshark。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    由于我们无法获得一致的结果、并且我不希望 EMAC 被中断驱动、因此我更喜欢不要花更多时间查看此代码。

    我对我发送给您的不是中断驱动的代码的结果感兴趣。  我从您的数字 FAE 听说过您重复了我在使用此代码时看到的问题。  由于我们似乎对该代码具有一致的结果、而这正是我尝试使用的代码、因此我更愿意确定此代码出现问题的原因。 BTW、如果我只是在代码循环时添加相同类型的停止、则此代码正常工作。  您可以查看代码文件并进行评论吗?

    谢谢、

    Tom

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

    我没有测试您的代码。 由于我忘记了将数据长度写入附加的数据包、因此我没有收到附加的数据包。 修改回送代码后、我收到了附加的数据包、没有任何问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    QJ、

    抱歉。 我返回到电子邮件、说您在代码上看到了问题、而不是我的问题。

    这让我感到很困扰、我们看到了不同的结果。 您是否确定在最新测试中已完成所有更新(较大的数据包并在循环时注释掉)? 也许有人无意中被遗漏了。 不同大小的数据包也很好、以确保没有误解。

    无论如何、由于我们没有一致的结果、您的示例是由中断驱动的、而我的案例不是、我已经根据 TI 的要求提供了我的代码... 您能运行我的代码并进行评论吗?

    谢谢、

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

    我正在为另一位客户进行测试、并将运行您的测试案例。 要运行测试、我需要将 HDK 连接到以太网路由器、对吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     您好 QJ、

    我将 HDK Enet 连接到我的 PC、以便可以使用 Wireshark 查看发送的内容。  以下内容从之前的电子邮件粘贴到 FAE 中、但有一个图像没有通过。  我将尝试附加它。

    要生成并查看问题,请执行以下操作。  

    1. 在 sys_main.c 第88行放置一个断点。
    2. 在 URDC_enet.c 第312行放置一个断点。
    3. 加载并运行/恢复程序。  我们使用的是 tms570ls3137 HDK。
    4. 在 sys_main (88)处中断时、将变量 I 修改为900十进制。  
    5. 运行/恢复程序
    6. 当在 URDC_Enet (312)处中断时、您可以看到以下内容:
      1. 变量 TX_STATUS 为0x40000000、表示没有 EOQ。
      2. 使用内存浏览器查看0xFC520200处的描述符。  地址0xFC52022C 的值为0x50000000。  该地址与在步骤6.a.中获取0x40000000值所读取的地址相同
      3. Wireshark 跟踪仅显示发送的两个数据包中的第一个。

     一些说明/意见/解释:

    • 供参考、代码将描述符列表的 flag_pktlen 字初始化为0x50000000。  当测试用例失败时、仅使用地址0xfc520210–0xfc52024f。
    • 6.a 和6.b 处的值不同。  这是一个时间问题。  存储器浏览器中显示的描述符在断点后被抓取。  到目前、EMAC 已指示 EOQ。
    • 由于 TX_STATUS 未显示 EOQ、因此应已发送从0xfc520230–0xfc52024C 追加的第二个数据包。
    • 0xfc52022c 和0xfc52024c 处的描述符以及 Wireshark 跟踪表明第二个数据包未发送。
    • 如果未在 main (88)处设置第一个断点、则将重复发送两个数据包。  在这种情况下、在第二个数据包信息完全添加到描述符列表之前、第一个数据包足够短 EOQ 被置位。 这很明显、因为 URDC_enet.c (312)处的断点从未命中。  由于这两个数据包被重复发送、它还会指示描述符的逻辑设置是好的。

     

     谢谢、

    Tom

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

    我对您的代码进行了更多的测试。 让我感到很遗憾的是、我们没有看到同样的东西。

    我发现代码要求 Size1为 size2的5倍。 我把它们保持为彼此的倍数、但我没有达到5的期望。 这说明了其中的一些差异。 我将所有数据包设置为1500/300、就像您所做的那样。

    我现在看到的是仅发送两个数据包、第一个是1500、第一个应该是在 EMAC.c 第125行创建的数据包。 第二个是由 create_append_packet 创建的、其中首次调用 EMACTransmit。 我注意到附加的数据包是在对 HDP 的初始写入之前添加的、因此它不会附加到活动列表中。

    由于代码滞留在 EMACTxIntHandler 函数中的 EMAC.c 第1585行、因此永远不会发送数据包3和4。

    您是否确认您收到了4条消息或仅收到了2条消息?
    您是否也看到程序卡在1585?
    或者它是否在 main 的 while 循环中结束?


    谢谢、

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

    您好 QJ、

    只是想知道它的状态是什么。

    谢谢、

    Tom

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

    您好 QJ、

    请提供此问题的状态。

    谢谢、

    Tom

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

    自我首次发布有关此问题的帖子以来已有六个月、自您上次对此帖子的回复起已有一个月。  我可以获得这方面的一些状态吗?

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

    从(8/10)开始六周后、TI 告知我将运行测试案例。 又是一周,完全沉默。 太棒了。 甚至不会回复论坛和电子邮件中重复尝试的状态。

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

    从8月13日开始、我有职业经历、然后出差到上周。 我现在正在赶上 E2E 主题。 很抱歉。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    收到了来自 TI 的自动消息、询问问题是否已解决、并指出线程将在不活动30天后锁定。 那么、只需添加活动。 仍然希望得到响应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    今天早上、我被分配给了昨天刚开始的新主题、我将关闭这个主题。 对于此问题迟迟未采取行动、我深表歉意。