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:HalCoGen 生成的以太网驱动程序-输出队列中断

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/583653/tms570lc4357-ethernet-driver-generated-by-halcogen---output-queue-broken

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

您好!

在 HalCoGen 生成的以太网驱动程序中、我发现了一个严重问题。 问题是在代码中测试 DMA 引擎采用的 NULL 指针。

简称为 HL_EMAC.c 文件中的 EMAC_BUF_DESC_EOQ 标志 以下是 TRM 的一部分:

32.2.6.4.9队列结束(EOQ)标志
置位时、该标志表示相关描述符是发送队列中的最后一个描述符
发送器已经停止。 该标志最初由清除
软件应用程序、然后再将描述符添加到发送队列中。 该位在时由 EMAC 置位
EMAC 确定描述符是给定数据包的最后一个(EOP 标志被置位)、并且没有
发送列表中的更多描述符(下一个描述符指针为 NULL)。
软件应用程序可以使用该位来检测相应的 EMAC 发送器的时间
通道已停止。 当应用程序向发送附加数据包描述符时、这很有用
EMAC 已拥有的队列列表。 请注意、此标志仅在 EOP 描述符上有效。

这包含明显的请求、即在将片段添加到传输队列之前、SW 必须清除此标志。 但当前代码没有执行它。

详细信息:

使用此描述符进行操作有两个部分。 一个是开始发送(函数 EMACTransmit)、另一个是在发送完成后(函数 EMACTxIntHandler)

EMACTransmit 仅为第一个片段数据包设置所有标志。 当一个数据包有多个存储器片段时、当前代码只会在最后一部分添加 EOP 标志。 其他标志保持不变。 第一个和最后一个之间的所有片段也没有变化(如果存在)。

EMACTxIntHandler 清除许多标志、但从不清除 EOQ 标志。

问题是上层使用生成多个片段数据包。 对于 LwIP、这种情况并不少见。 所有片段描述符将反复使用。 经过一段时间后、许多片段在加入队列之前具有 EOQ 正数是正常的。 我们有比赛、SW 可能比参赛者快、在本例中、EOQ 的测试结果具有错误的正电位。 导致传输时在卷中丢失不能忽略的数据包。

此代码(包括问题)可能会围绕所有 Hercules 系列 MCU 共享。

Jiri Dobry

PS:您是否有计划为此创建更好的代码? 它有许多疯狂的部分。 例如、在"中断函数"内汇集"无限"循环。 或将幻数 0xFCF78600转换为指针。 (在"安全"代码中? WTF?)
坦率地说、我希望其他没有源代码和没有其他选项(闪存驱动器)的 Hercules 代码具有更好的质量。

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

    我将把您的意见和问题转交给我们的软件负责人、以便他们能够得到解决。 我们一如既往地感谢您的反馈、无论其对我们的工作产品的重要性如何、因为这使我们能够继续改进。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、 Jiri、  

    提出了一个 CQ 票证:SDOCM00122906以跟踪此问题。  

    我了解您对 EMAC 驾驶员质量的担忧、本模块的"代码质量报告(MISRA 及其指标)"也显示了许多强制性违规行为。 开发团队意识到这一点。  由于 EMAC 驱动程序是从非安全软件移植的、因此在代码质量方面几乎没有差距、并在我们的 CQ 数据库中进行捕捉。 必须重新设计此特定的驱动程序以处理这些票证、遗憾的是、由于其他高优先级任务、该团队已暂停重新设计工作、直到2017年第4季度。

    对于客户问题、我们将逐案处理、我们建议解决问题并提供支持以解决问题、直至重新设计的驱动程序可用。 对于 EMAC、用户可以通过使用 EMAC.C 中的"#if 0"和"用户代码部分"删除 HALCoGen 生成的 ISR 来实现定制 ISR

    在整个软件生命周期中、我们严格遵循认证安全软件开发流程和质量指南、如果存在质量违规、则每种违规行为都是合理的并得到批准。 如果 您仍然对 SafeTI 诊断库、HALCoGen (位于 EMAC 顶部)等 Hercules 软件产品的质量有疑问、请随时在论坛上提出。 每个问题都将被正式记录并跟踪以关闭。