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.

[参考译文] RTOS/TMS320C6678:选择最佳的处理器间通信方法

Guru**** 2562960 points
Other Parts Discussed in Thread: TMS320C6678

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/624119/rtos-tms320c6678-choosing-best-inter-processor-communication-method

器件型号:TMS320C6678

工具/软件:TI-RTOS

大家好

在我的应用中,我需要在内核0 和1-7内核之间传输数据(我在内核0上使用 Linux C6x,而在其他内核上使用 SYS/BIOS,但我认为我的问题与 Syslink 和 Linux C6x 无关)

我有两种类型的数据:

1-语音数据:500行(每核心约70行),每行传输320字节,但500行独立传输数据(例如,第 x 行和第 y 行之间的时间差可能低于10us)。 数据确认和重新传输不是必需的、但数据丢失率最多低于5%

2-控制数据:500行(每个内核大约70行), 每行每15秒传输10字节,但第 x 行和第 y 行之间的时间差超过1ms。此类型需要数据确认和重新传输。

我有3种方法:

1 -我自己的基于共享存储器的协议以及 用于轮询的软件标志和线程  

2 - IPC 通知

3 - IPC MessageQ

第一步、我使用 自己的协议、但我尝试使用 IPC 方法来提高性能和可靠性  

我对选择最佳方法有一些疑问:

1-如果我使用“通知语音数据”,我可以在内核之间创建500行吗?

2- 如果我使用 Notify 作为语音数据,那么当内核1 (用于第 y 行)和内核0上运行的 ISR 为内核1 (用于第 x 行)生成中断时,IPC Notify 中的嵌套中断支持或我需要使用 MessageQ 时会发生什么情况?

3- 如果我使用 MessageQ 来控制数据,我可以在内核之间创建500行吗?

(希望一切都清晰)

感谢您的关注

EBI

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

    我已通知软件团队。 反馈将发布在此处。

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

    谢谢 Yordan

    EBI

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

    你(们)好  

    我仍在等待软件团队 的反馈

    此致

    EBI

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

    MessageQ 是推荐用于处理器间(内核)通信的数据传输解决方案。

    您无法在内核之间创建500行。 如 Wiki 中所述、通知 API 使用多处理器 ID 和线路 ID 来针对与器件上特定处理器之间的特定中断线路。 线路 ID 号通常为0 (零)、但提供给在处理器之间具有多个中断线路的系统上使用。 C6678具有8个 IPCGRx 寄存器(IPCGR0至 IPCGR7)(即线路)、外部主机或 CorePacs 使用这些寄存器生成到其他 CorePacs 的中断。

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

     、

    感谢您的回复和有用的关键字。 我再次搜索并尝试回答我的问题  

    [引用 user="ebi alinejad">1-如果我使用“通知”作为语音数据,我可以在内核之间创建500行吗?

    您说:

    [引用 USER="Garrett Ding]C6678具有8个 IPCGRx 寄存器(IPCGR0至 IPCGR7)(即线路)、外部主机或 CorePacs 使用这些寄存器来生成到其他 CorePacs 的中断。
    [/报价]

    但是根据这个布置、c6678有一条中断线(lineid = 0):

     IPCGRx 寄存器使用相同的行来生成中断。
    您能确认正确答案吗?

    [引用 user="ebi alinejad"]2- 如果我使用 Notify 获取语音数据,当在核心1 (用于第 y 行)和核心0上运行的 ISR 为核心1 (用于第 x 行)生成中断时会发生什么情况,IPC Notify 中会出现嵌套中断支持,或者我需要使用 MessageQ?

    如果我使用 Notify with 1 (或8)行在内核之间传输500个独立流(发送带有效载荷的流标识符), 当内核1 (用于流 y)上运行的 ISR 时,内核0不能中断内核1 (用于流 x)和流 x 数据丢失 (流 x 和流 y 使用相同的中断线)! (请确认是否正确)

    谢谢

    EBI

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

    我应该明确-是的、每个 C66x CorePac 都有8个 IPCG 寄存器、1个 IPC_Local 中断事件(#91)、用于来自任何 IPCGRx 寄存器的内核间中断、请参阅数据表中的图7-32 TMS320C6678系统事件输入- C66x CorePac 主中断(第3页、共4页)。

    在您描述的情况下、流 x 数据可能会丢失。 如果使用"通知",则可能需要自定义同步机制来处理它。

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

    Garrett、

    感谢您的支持!
    EBI