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.

[参考译文] TMS320F28386S:CPU1和 CM 之间共享的 IPC 存储器。

Guru**** 2537330 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1269269/tms320f28386s-ipc-memory-shared-between-cpu1-and-cm

器件型号:TMS320F28386S
主题中讨论的其他器件:SysConfig

你(们)好!

我正在编程一个原型、以便在 CPU1和 CM (Communication Manager)之间共享数据、因为通过 driverlib 的 SDK 在两个内核中使用相同的全局数据声明为消息队列提供支持。

在示例"ipc_ex2_msgqueue _c28x1"上可行、但使用相同原理放置更多全局数据以共享更多数据时、C28x 使用128字节(64字)对齐方式分配内存时会出现问题、而 CM 似乎未使用任何对齐、 此外、存储器中数据的分配顺序会随全局数据的大小而变化、因为另一个足够大的全局声明不是128字节的倍数 C28x 存储器上的结构相对于 CM 内核显示了一个偏移量。 请参阅图:

(IPC_CM_TO_CPU1_GetBuffer_QPC 是 CPU1和 CM 之间共享存储器上的全局结构)

我的数据= 248字节

厘米:

C28x:(您可以看到 driverlib 提供的结构的大小不是128字节的倍数)

MyData = 992字节:

CM:(数据可更改顺序)

C28x:(在本例中、driverlib IPC 将不起作用)

我已经尝试在 CM 命令文件中更改该段的对齐方式、但不起作用、在 C28x 中、我使用 SysConfig 配置命令文件、因此我无法更改 CM_to_cpu_memory_shared 段的任何内容、因为 SysConfig 上没有此选项、

所以... 我可以在共享的存储器上声明全局变量、还是只能在本地进行全局变量? 是否有任何方法可以知道数据将被分配到何处? 我已经尝试使用参数 align (128)在 CM 上更改此段的对齐方式、但结果没有更改、有没有建议这么做?

感谢您的指导。

Ramon Martins。

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

    您好!

    我建议您仅在 C28应用程序中定义 C28-CM 数据、并在 CM 应用程序中定义 CM-C28数据。 在发送 IPC 消息时、您可以将要共享的数据的地址传递给另一个内核。 如果使用 IPC_ADDR_CORRECTION_ENABLE 标志、该函数会将 C28地址转换为 CM 地址、反之亦然。 请注意、仅当数据放在 C28-CM 或 CM-C28 MSGRAM 中时、才支持此特性。

    此致、

    维纳

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

    您好、Veena:

    感谢您的回答。

    问题在于 driverlib 不使用此资源来定义其变量。 所以、正如我说过的、当我在共享的存储器上声明一个全局变量(足够大)时、编译器选择的地址代替 IPC 的缓冲区1。 ipc.c 源文件假设缓冲区将放置在两个内核上的相同位置、无需进行验证或校正。 一次、此地址由 const 结构使用时、我将进行的任何更正都是不可能的(不亲自更改源文件、我也不会这样做)。 我曾尝试使用#pragma 位置来确保 IPC 缓冲区的地址、但该指令在 CM 端似乎效果不佳。

    附注:关于我的代码、我知道、实际上、最佳做法是使用正确的寄存器来共享地址、这是我的应用程序的"Hello World"程序。

    再次感谢您的观看。

    此致、

    Ramon Martins。

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

    好的、明白。

    Driverlib 期望已定义的 driverlib 缓冲器被放置在相应 RAM 的第0个偏移处。 如果编译器将其分配给不同的地址、您可以将它们分配到硬编码的地址

    此致、

    维纳