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.

[参考译文] PROCESSOR-SDK-AM57X:HLOS 线程之间的 MessageQ

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/671862/processor-sdk-am57x-messageq-between-hlos-threads

器件型号:PROCESSOR-SDK-AM57X

你好。 尝试在 QNX 7.0上的线程之间发送 TI-IPC MessageQ 消息时出现错误。 控制台上显示的错误为:"transportPut:write failed: 9, bad file descriptor"。 在与 DSP1交换消息时,相同的代码工作正常。

我的测试设置:

电路板:AM572X-EVM/BeagleBoard X-15
Cortex-A15s/HLOS:QNX 7.0、使用 TI-RTOS/IPC (处理器 SDK v4.02)库(processors.wiki.ti.com/.../IPC_Install_Guide_QNX)
DSP1:TI-RTOS/IPC (处理器 SDK v4.02)

IPC 用户指南(processors.wiki.ti.com/.../IPC_Users_Guide) 声明:

"IPC 可用于与以下设备进行通信:

同一处理器上的其他线程
运行 SYS/BIOS 的其他处理器上的线程
运行 HLOS 的其他处理器上的线程(例如 Linux、QNX、Android)"

这种说法使我认为命名 MessageQ 应该可以从运行在任何操作系统上的任何芯片处理器上的任何线程进行访问。 同样、我能够从 QNX 线程发送到 DSP1 MessageQ、而不会出现任何问题。 这基本上是常用 IPC/ex02_MessageQ 示例、它运行得很好。 这是否特定于 TI 的 QNX IPC 实施? 我是否有误解?

谢谢、
Chris

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

    遗憾的是、QNX 的 IPC3.x 实现目前不支持 QNX 上的本地传输 MessageQ_Put。 我将更新 wiki 以说明这一点。

    谢谢、
    Angela
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Angela 的回复。 有很多潜在的权变措施、只是为了确保我没有遗漏任何东西。 QNX 上的 IPC 是一款出色的软件包。

    另一个简短的问题、因为我已引起您的注意...

    我们一直在使用内存分配器资源管理器来管理 DDR 保留的分割。 此 API 上没有太多的文档,但我尝试通过修改...将不同的内存(OCM SRAM)映射到代码。

    IPC_3_47_00_00/QNX/src/ipc3x_dev/sharedmemallocator/resmgr/SharedMemoryAllocator.c:

    #define SH_MEM_Block1_START 0xBA300000
    #define SH_MEM_BLOCK_SIZE 0x5A00000

    #define SH_MEM_Block2_START 0x9DB00000
    #define SH_MEM_Block2_size 0x1000000

    如果我更改任一块的地址起始值和大小并重新生成 IPC、一切看起来都正常。 我只是想知道你是否知道我不应该这么做的原因?

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

    这是为内存分配器配置不同内存区域的正确方法。 听起来您已经在执行此处提到的操作:

    processors.wiki.ti.com/.../IPC_3.x_FAQ

    IPC3.x 本身不会将内存分配器用于任何 IPC 通信、因此更改此地址不会影响 IPC。 另外、请确保系统中没有其他软件正在使用内存分配器、并且希望内存位于该区域(例如、libdce 使用内存分配器)。

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

    再次感谢 Angela。 我不确定我是否已经阅读过该常见问题解答、但我很高兴它建议我做些什么。

    此致、

    Chris