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.

TMS320F28388D: IPC_sendCommand与IPC_sendMessageToQueue的区别

Part Number: TMS320F28388D
Other Parts Discussed in Thread: C2000WARE

请问以消息队列的方式交换数据,相比ipc_ex1_basic_c28x1的IPC_sendCommand,优点是什么呢

  • 队列函数会创建和管理消息对象的循环缓冲区。 顾名思义,如果在另一端有机会读之前,发送了多个消息,那么队列函数将会给这些消息排队。 IPC_sendCommand 函数并没有集成此队列,由调用 IPC 函数的应用程序在发送另一个之前检查确认 / 响应。

    我感觉有点类似FIFO的机制

  • 您好 感谢帮助

    您说的可以理解,还想请问一下,消息队列缓冲区的大小,可以调整吗?

    工程里driverlib文件夹是exlude的,

    下面的driverlib.lib链接的是

    \TI\c2000ware\C2000Ware_4_01_00_00\driverlib\f2838x\driverlib\ccs\Debug\driverlib.lib

    应该是编译好的一个库文件吧

  • 可以调整的,例程里面的话是IPC_BUFFER_SIZE这个参数,不过抱歉的是我没有在TRM中找到circular buffer的设置限制。。。

  • 您好 感谢帮助

    还是有以下疑问请教您 麻烦了

    工程文件列表中的driverlib.lib,链接的路径是TI\c2000ware\C2000Ware_4_01_00_00\driverlib\f2838x\driverlib\ccs\Debug\driverlib.lib,这个看起来是一个编译好的库文件,您提到的IPC_BUFFER_SIZE参数,我在ipc.h文件中找到了它的定义

    问题1. 这个IPC_BUFFER_SIZE,按照注释,定义的是消息的数量,circular buffer的大小,我还是没有找到定义

    问题2.不论是ipc.c,还是ipc.h,甚至整个driverlib文件夹,都是exclude的。那么修改这些exclude的C文件或者头文件的内容,会有用吗?

    问题3.在ipc.h文件中定义了IPC_MSGQ_SUPPORT

    为什么如图所示的ipc.c文件中的那部分代码,会显示未参与编译的状态呢,我在工程的搜索,并没有找到#undef IPC_MSGQ_SUPPORT这样的语句

  • 问题4.数据是如何复制到消息队列的循环buffer里的呢

    以上代码中,TxMsg.address = (uint32_t)CPU1Data;设定了数据的指针给address

    那么数据复制是在调用IPC_sendMessageToQueue函数时发生的吗?

  • 需要driverlib.lib文件和相关的头文件。最后一个文件夹“driverlib”是exclude from build的,它只能用于参考/查看driverlib代码。

    其余的几个问题我等有回复了一起更新在你的新帖里吧

  • 好的 谢谢

  • 对方回复了,你看一下另一个帖子