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.

[参考译文] CCS/TMS320C6678:如何实现直接在 CCS RTSC 工程中生成代码的 XDCscript 代码?

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/651313/ccs-tms320c6678-how-to-implement-xdcscript-codes-that-generates-codes-right-into-ccs-rtsc-projects

器件型号:TMS320C6678

工具/软件:Code Composer Studio

我正在设计一个库、我愿意利用 RTSC 系统使代码和特定于电路板的配置相互独立。 然后、一段代码可用于不同的配置。

以下是我计划的内容:

  • 电路板特定配置由参考时钟速率、物理 RAM 大小和其他硬件组成。
  • 每个板对应一个 RTSC 平台、然后我得到了几个平台封装。
  • 每个平台软件包都是定制的、但所有软件包都具有继承 XDC IPlatform 的平台模块、因此我可以在 CCS 项目中切换平台。
  • 代码、特别是驱动程序代码、不应知道平台特定的详细信息。 他们可以从统一接口和头文件中获取平台信息。
  • 有一些信息需要从配置对象模型传输到运行时环境。 因此、我想 RTSC 模块是必须的。
  • 但是、我还想完全控制源文件和头文件。 因此、我只使用 metaonly 模块来删除 XDC 生成的长头文件。 然后、我必须使用 XDC 模板来生成运行时代码。
  • 由于用户可以更改".cfg"文件中的设置、因此我无法预编译和存档 XDC 模板生成的代码。
  • 因此,我在模块的 module$use()方法中调用 genFile(),该方法在解析用户配置文件后调用。
  • 此外、我的自定义代码都用 C++编写。

但问题出在哪里、我如何将生成的代码添加到 CCS 工程中、并使其编译并链接到工程代码文件?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我假设您知道 Mod__prologueue.h 和 Mod__epilogueue.h 文件、并且得出结论、您仍然不希望具有生成的头文件的运行时 RTSC 模块、您可以将自己的内容添加到其中。 如果您不知道这些文件、请访问以下链接- rtsc.eclipse.org/.../XDCspec_-_@CustomHeader

    对于模板文件、您可以使用属性@Template - rtsc.eclipse.org/.../XDCspec_-_@Template
    使用您在属性@Template 中指定的名称创建文件、该文件的内容将展开、然后包含在自动生成的配置 C 文件中。 在 CCS 中、您可以在 Debug/configPkg/package/cfg 中找到配置 C 文件。 文件的扩展名为".c"。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好,Sasha。 感谢你的答复。

    我知道@CustomHeader 属性、不想使用它、因为长主头文件仍由 XDC 生成。

    “@模板”属性似乎是个好主意,但对我来说不起作用。 因为我的源代码是用多个命名空间用 C++编写的、其中的接口不能从 C 调用。如果我想使用 C 代码、我必须为这些接口创建可调用的 C 语言包装程序。

    有没有其他方法可以实现我的目标?

    我可以在 RTSC 工程中看到一些功能:

    • 生成的"app_p .c/h"文件位于生成的名为 configPkg 的软件包中。
    • CCS 工程本身的 makefile 文件不包含有关"app_p"的任何信息 .c/obj"、因此项目不必了解生成的源文件。
    • CCS 工程链接到在软件包 configPkg 内部生成的"linker.cmd"。 在该链接器脚本中、写入"app_p .obj"。

    因此、我想我可以使用与生成自定义软件包或将一些脚本添加到软件包 configPkg 中相同的方式、以便可以在软件包中编译从模板生成的自定义源文件、然后与 CCS 工程的其他内容链接。 但这种方法是否可以实现?

     

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

    我不理解您提出的解决方案。 如果这是您要执行的操作、您实际上无法将任何额外的文件添加到自动生成的软件包 configPkg 中。 此外,您已经有一个包含元模块和 genFile()的软件包,因此您不需要其他自定义软件包。
    您唯一的问题似乎是如何将 genFile()生成的文件插入 CCS 项目。
    在您的库包中,在调用 genFile()之前,您可以找到 CCS 中顶层项目目录的绝对路径。
    您可以使用 Program.buildPackage -rtsc.eclipse.org/.../Program.html 获取主配置包的名称。 您已经知道它是'configPkg'、但不必对其进行硬编码。 然后、您可以找到该软件包 rtsc.eclipse.org/.../IPackage.html 的存储库的绝对路径、这将是 Debug 或 Release 目录。 从这里、您可以向上一级在顶部目录中创建 C++文件、CCS 应在顶部目录中自动选取并构建该文件。 以下是您访问项目顶部目录的方法:
    xdc.loadPackage (Program.buildPackage).packageRepository +"../../";

    您可能希望在运行模板之前创建一个初始 C++文件、以便 CCS 将其添加到其 makefile 文件中、然后模板将继续用新内容替换该文件的内容。

    最后、我必须告诉大家、这是 XDCtools 的一种不同寻常的用法、我没有尝试过任何这种用法。 它可能工作、也可能不工作。 如果您决定尝试并遇到一些问题、请告诉我。

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

    您好、Sasha。

    感谢您的想法、我尝试直接在 CCS 项目目录中生成 CPP 文件。 它只能在增量编译中工作、也就是说、如果我从头开始编译工程、它会失败、然后我必须再次编译(现在变为增量)。 这也意味着我必须点击两次'build'来创建二进制文件、这使得构建工作变得很奇怪。 所以我不会采用这种方法。

    我想在工程中预添加 CPP 文件并使用模板替换其内容应该可以防止此问题、但这种方法允许每个 CCS 工程手动添加初始 CPP 文件、这会使库不易使用。 因此、我必须放弃它。

    但您指出、我可以使用'xdc.loadPackage (Program.buildPackage).packageRepository +"../../..." 跟踪实际项目位置。 这对我有很大帮助。

    因此、我当前的解决方案是:
    -源文件是在库包中编译的,因此在配置对象模型中不可更改给库用户。
    -提供具有不同设置的多个库。
    -用户代码使用单个头文件作为条目来访问多个库之一,该头文件包括在 CCS 工程中生成的中间头文件,并根据 cfg 模型确定实际使用的库。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我可以将其标记为已解决吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的
x 出现错误。请重试或与管理员联系。