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/CC3200SDK:OSI MsgQRead 为何复制数据?

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/626881/rtos-cc3200sdk-why-does-osi_msgqread-copy-data

器件型号:CC3200SDK

工具/软件:TI-RTOS

我有指向大小为2kB 的数据结构的指针、我想经常在线程之间传递它们。 写作很明显。 但是,由于读取函数具有以下定义 OSI MsgQRead (OsiMsgQ_t *队列、void* pMsg、OsiTime_t 超时),因此读取似乎不太清楚。 正如我看到的、第二个参数只是指向 void 的指针、这可确保写入指针中的数据被复制到传递的指针中。 因此,一个自然的问题是:为什么不接受 void **ptr,而只保存写指针,以避免复制数据? 此外、嵌入式系统中过多的复制会导致性能不佳。

关于这个问题、我现在唯一可以看到的解决方案是以以下方式为我的消息指针创建一个包装程序并将其传递到队列:

struct wrapper {
MyMsg *msg;
} 

是否有更好的方法?

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

    感谢您提出问题。 请给我们一些时间与您联系。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Yuriy、

    为了使进程间通信正常运行、需要将指针指向用于存储接收到的消息的缓冲器。 一个进程的地址空间与其他进程分开,这些进程需要有一个缓冲区,以便与 OSI_MsgQRead 一起使用。