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/TMS320F28379D:如何将 CPU1和 CPU2固件组合在一起

Guru**** 2609895 points
Other Parts Discussed in Thread: TMS320F28379D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/687136/ccs-tms320f28379d-how-to-combine-the-cpu1-and-cpu2-firmware-together

器件型号:TMS320F28379D

工具/软件:Code Composer Studio

你(们)好

我正在尝试使用 TMS320F28379D MCU。 从示例中可以看出、每个 CPU 都有自己的工程编译和单独加载。 但是、将两个项目合并为一个项目会更加方便、这样我只需管理一个固件。

因此、有几个与此相关的问题:

第1个。 我可以看到这些示例

CPU1

.

#endif 

我可以使用相同的方法来定义这段代码只能在 CPU1或 CPU2上使用。 但是、我找不到任何定义的 CPU1、您能解释一下它们的工作原理吗?

第2个。 是否有一个寄存器存储我可以在代码开头读取的 CPU1或 CPU2信息、并确定其余代码应如何执行、如果是、我可以在哪里找到该信息?

第3个。 如果我可以将 CPU1和 CPU2项目与一个 cmd 文件组合在一起、将存储器定义组合在一起、那么我应该能够在加载项目时选中 CPU1和 CPU2这两个复选框、对吧?

谢谢

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

    F28379D 是一款双核器件、其中每个内核都有自己的专用资源和共享资源(例如存储器)。 因此、每个内核都有自己的存储器映射、自己的链接器命令文件以及自己的项目。 因此、您需要分离项目并使用单独的.out 文件对器件进行编程。 您所指的预定义符号(CPU1和 CPU2)在 CCS 工程属性的“C2000编译器”下进行配置,然后选择“预定义符号”。 项目中使用 CPU1和 CPU2名称来有条件地包含特定于每个 CPU 的外设寄存器头文件代码。

    有关双核项目的示例、请参阅 C2000多日技术讲座中的实验11、网址为:

    processors.wiki.ti.com/.../C2000_Multi-Day_Workshop

    要回答您的问题、您可以定义通用代码、这些代码可以有条件地与特定 CPU 配合使用。 在源文件'PieVect.c'中、您将注意 到#ifdef 正用于此目的。 此外、F2837xD 具有"器件识别寄存器"、其中包含有关器件的各种信息。 更多详细信息、请参阅第185页的数据表(SPRS880I)和第86页的技术参考手册(SPRUHM8G)第2.2.1节。

    如果您有兴趣、也可以在 C2000一日技术讲座中找到另一个双核项目(请参阅实验1):

    processors.wiki.ti.com/.../C2000_One-Day_Workshop

    但愿这对您有所帮助。 如果您的问题得到了解答、请单击绿色的"验证答案"按钮。 谢谢。

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

    好的、我看到 #ifdef CPU1的来源。 是的、如果要使用该项目、我必须具有单独的项目。 但是、正如您所描述的:
    第1个。 我可以在代码开始时读取 CPU ID、并使用它来确定代码的其余部分应该如何执行。
    第2个。 我应该能够执行一个通用的 cmd 文件来定义两个 CPU 的内存映射。
    如果我执行1和2并仅创建一个.out 文件、我应该能够使用它来对两个 CPU 进行编程、对吧?

    将两个.out 文件用于大规模生产非常不方便、因为有时可能会将错误的程序加载到 CPU 中、从而导致系统有时发生故障。 如果我无法做到这一点、我必须坚持使用 F28379S。 但这对我的项目来说会有点慢。
    请建议
    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    海南

    ifdef 是预处理器指令。 它决定在编译期间包含或排除哪些代码、而不是在运行时包含或排除。 也就是说、在构建过程中只包含 CPU1或 CPU2的"true"条件代码。 编译代码后、它是在器件上运行的.out 文件。 因此、有两个单独的.out 文件-一个用于 CPU1、另一个用于 CPU2。 ifdef 允许有条件地使用通用源文件(例如、实验11中的"PieVect.c")。 您仍需要为每个 CPU 提供单独的.out 文件。

    话虽如此、尝试使用相同的.out 文件来实现每个 CPU 将非常困难且复杂。 当器件启动时、CPU1在将各种资源用于 CPU2之前控制它们(例如时钟、共享存储器、GPIO 等)。 即使您尝试读取每个 CPU ID、您仍需要在每个内核中使用两组代码、这使得它在内存使用方面效率非常低、并且它很可能与共享内存发生冲突。

    但愿这对您有所帮助。 如果您的问题得到了解答、请单击绿色的"验证答案"按钮。 谢谢。

    - Ken