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.

[参考译文] TMS570LS0914:在使用 N2HET 的 HAL 和 HET-IDE 生成的代码中绑定定义

Guru**** 2538240 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/865766/tms570ls0914-clashing-definitions-in-code-generated-by-hal-and-het-ide-using-both-n2hets

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

我想在 TMS570中使用两个 N2HET、一个用于模拟 UART、另一个用于第二条 I2C 总线。  UART 工作了一段时间、现在我要单独添加 I2C。 在这两种情况下、我都使用 TI 示例。  我稍微调整了 UART、但尚未更改 I2C。

我本质上是仅用于生成代码的 IDE (例如 HET_EMU_I2C.c 和 HET_EMU_I2C.h)。  不执行任何仿真。  在 HAL 中、我将在 HET1的 NHET 驱动程序设置中为 UART 仿真器指定.h 和.c 文件、与 HET2中的 I2C 仿真器的设置类似。

我有几个问题需要我提出建议。

(a)当 HET 代码中的行标签被转换为 C 代码时、没有添加任何与 HET 文件名称相关的(比如说)、这样、由 HET IDE 为这两个程序生成的头文件就会与定义相冲突。  例如、两个 HET 程序都有一个标签 Check_Stat1、并且 HET IDE 为两个头文件生成标签 Phet_check_STAT1_0。  当然、我可以浏览 HET 文件并去除标签的重复、但在某种程度上、末尾的_0意味着、如果我知道如何正确地告诉它、IDE 现在可能会如何更改#defines。

(b)相似地、这些头文件将"HET_v2"定义为1、而 std_nhet.h (由 HAL 生成)将其定义为0。  只有一个 HET 程序发生了正确的事情。  但是、当我合并两个单独的 IDE 生成的文件时、存在不兼容的重新定义。

您认为这些工具使用不当、导致它们生成错误的头文件吗?  谢谢!

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

    您好!

    请参阅此应用手册:

    https://processors.wiki.ti.com/images/a/a8/N2HET_EMU_I2C_AppNote.pdf

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

    尊敬的 QJ Wang。

    谢谢、但这正是应用手册(及其关联的代码)、这是我首先获取 I2C 代码的地方。  实际的问题是、当我尝试在同一程序中使用两个单独的 HET 程序(这一个程序与 UART 仿真器非常相似)时。  在本示例中、一次只使用单个 HET 程序、它本身也在 CCS 项目中。  当我尝试将两个单独的 HET 程序合并到单个 CCS 项目中时、问题就会出现、如我最初的问题中所述。

    考虑到标签的形式、HET IDE 几乎必须能够处理这种情况。  谢谢。。。

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

    我可能找到了这个问题的答案。  请参阅此链接。  听起来、为了使用两个单独的 N2HET 程序、您必须使用一个特殊的编译器开关手动汇编第二个程序。  请 IDE 各位...这是愚蠢的。  它应该只是您为其开发的 N2HET (1或2)项目的属性、IDE 应该添加开关本身。  

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

    在两个 HET 程序中包含 std_nhet.h 的顺序中的某个位置似乎仍然存在一个错误、可能还有 HET.c 和 het.h 本身。  请注意、het.c 在包含两个 HET 程序的两个 hetp 生成头文件之前包含 std_nhet.h。  STD_NHET 将符号 HET_v2有条件地定义为0 (如果未通过其他方式定义)。  但它是第一个 include、因此它确实将其定义为0。  之后 、生成的头文件无条件地将 HET_v2定义为1、这在某些情况下是 CCS 编译器抱怨的非法重新定义。  

    我通过在 std_NHET.h 的"用户代码"部分1中将 HET_v2定义为1来修复它  

    我们稍后将了解这是否起作用、但它确实会进行编译。

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

    您好!

    您可以将两个程序(SCI、I2C) 组合在一起并在 N2HET1 RAM 中执行它们。 LS0914具有2个 N2HET 模块、因此您可以将 SCI 代码放置在 N2HET1 RAM 中、将 I2C 代码放置在 N2HET2 RAM 中。 两个 N2HET RAM 都支持160条指令。

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

    你好。  我要离开这里、但我收到一封电子邮件、询问您是否已解决我的问题。  否  虽然您建议将这两个程序结合起来可以解决这个问题、但我发现的唯一真正解决问题的办法是几年前我在上面提到的另一个答复。  正如我说过的、HALCoGen 生成的代码即使在执行该操作时也存在错误。  是否有更好的方法来报告此错误并在 IDE 上给出复选标记以指定要使用哪种 HET?  我很高兴这样做、但我希望确保有人在我"关闭"此报告之前看到此错误、将其标记为已解决。

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

    Burns、您好!

    由于您已解决此问题、我将关闭此主题。 谢谢

    https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/868786

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

    尊敬的 QJ Wang。  我的个人问题已经解决、但我想强调、在使用两个 N2HET 器件的情况下、HalCoGen 生成的代码存在问题。  我还想确保我强烈建议 HET IDE 中应该包含一个为 HET2编译的 GUI 方法。

    我应该用不同的方式报告这种情况吗?

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

    谢谢 Burns、

    我们没有更新 HALCoGen 的计划。 但我们将在 HALCoGen 发行说明中添加此问题和权变措施。

    我们可以在 het.c 中切换头文件的顺序:

    #include "het.h"

    #include "nHET_01.h"

    #include "nHET_02.h"

    #include "std_NHET.h"
    #include "sys_vim.h"
    /*用户代码开始(0)*/
    /*用户代码结束*/