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:HalCodeGen EMAC 硬件寄存器访问问题

Guru**** 2347070 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/607052/tms570ls3137-halcodegen-emac-hardware-register-access-issue

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

当我在 HalCodeGen 中生成代码时、我在 EMAC.c 中获得以下代码  当使用优化的代码运行时、这会导致锁定、因为基准未定义为"volatile"、因此编译器只会将硬件寄存器值复制到处理器寄存器中、并在该寄存器上循环、而无需重新读取硬件。  看起来、基准应该是"(uint32 volatile *)"。

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

/*SAFETYMCUSW 28 D MR:NA "硬件状态位读取检查"*/
/*SAFETYMCUSW 134 S MR:12.2. "LDRA 工具问题"*/
while ((((uint32) 0U!=*((uint32 *) 0xFCF78600U)))

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

    易失性是指告诉编译器不要优化引用、以便在每次读取/写入时不使用存储在寄存器中的值、而是执行读取存储器访问。 易失性不会影响指向物理存储器地址(0xFCF78600)的指针。

    我运行由 HALCoGen 生成的 EMCA_llopback 演示代码、进行/不进行优化(全局)、它们的工作方式相同。

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

    也许这取决于正在编译的代码的确切行为。 此外、它似乎与生成的驱动程序代码中的其他硬件引用不一致、这些驱动程序代码似乎都具有 volatile 限定符。 在我的目标代码中、东西在那一行被锁定、我唯一能使它工作的方法是在 HalCodeGen 运行后手动将 volatile 限定符添加到驱动程序代码中。 我现在已经编辑了 HalCodeGen 安装中的基线驱动程序代码、这样我就不必在每次 HalCodeGen 运行时编辑生成的代码、但这不是一个好的工作方式。

    我认为这是一个错误报告、但我找不到任何方法可以在 HalCodeGen 上提出一个错误报告。

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

    我将向我们的软件开发团队提供您的意见以进行评估。 添加易失性可能是一个好做法。