Part Number:TMS320F28388D
ipc_ex2_msgqueue_c28x1例程在等待CM4内核回复消息时用了阻塞的方式:
我觉得这样可能效率低些,所以仿照CM4内核接收C28数据的方式,改成了以C28以中断方式接收CM4内核,测试接收时没问题,代码如下
请问这样做可行吗?合理吗?
如果可行,IPC的中断和ePIE中断之间是什么关系,哪个优先级高呢?
user78960159:
IPC的中断 有可能是软中断吗
,
Green Deng:
正好前段时间接了个IPC中断的帖子,里面有几乎完整的程序,你可以看一下:e2echina.ti.com/…/906701
,
user78960159:
您好 感谢帮助
您的帖子里最后的那份例程 我理解是CPU1与CM4间不停的数据交互 CPU1不断给CM4发送0~9 CM4不断给CPU1回复11~20 您看对吗
TRM没有仔细看 所以开始乱想了 没有注意IPC中断也是PIE里面的其中一个中断 所以我写的代码里中断函数最后没有ACK处理
,
Green Deng:
我看注释里说的是CPU1不断给CM4发送1~10?
,
user78960159:
您看这是CPUData,应该是0到9
这是CMDData,应该是11到20
,
Green Deng:
额好吧,那看来之前的帖子写错了,我去改一下。
,
user78960159:
Green Deng
您好 在C28和CM4进程间通讯调试过程中遇到一个现象,相关的问题我还是写在这个帖子里吧
TMS320F28388D: C28XCPU1与CM4 IPC通讯不能进入中断 – C2000︎ 微控制器论坛 – C2000 微控制器 – E2E 设计支持 (ti.com)
上面这个链接,也就是这个帖子里您贴出的那个帖子的链接,我又复制了一下
这个帖子中,C28与CM4双方都是利用中断方式收发消息
C28发送数据 —-> CM收到数据后进入中断读取数据,随后在中断中向C28发送回复消息 —-> C28收到回复消息后进入中断读取回复数据,随后发送回复消息给CM
上述过程循环往复,C28与CM之间不断进行消息交互。
在这个例子中,应该不存在A发送数据,在B没有读取数据的时候A再次发送数据的情况。
问题1. 如果A发送数据,在B没有及时读取数据的情况下,A再次向B发送数据会出现什么情况。
我在调试中遇到了这样的现象:
在C28中设定了固定周期的Timer中断,在timer中断中定时向CM内核发送消息;
在CM内核接收中断中设置断点,发现第一次是可以进到中断中的,但是只能进一次,在全速运行CM的代码,就进不到中断了;但是如果C28和CM都是以全速方式运行,在两方的变量观测窗口、内存观测窗口看,数据交互似乎是正常的。
我想这是不是由于设置断点,导致CM内核程序执行中断,但是此时C28内核还在不停的向CM内核发送数据,从而导致以消息队列机制进行交互出现异常
问题2. 如果需要多个消息通道的数据收发交互,我可以这样定义和使用消息队列吗?
case1:
IPC_MessageQueue_t messageQueue1;IPC_Message_t TxMsg1, RxMsg1;
IPC_MessageQueue_t messageQueue2;IPC_Message_t TxMsg2, RxMsg2;
IPC_initMessageQueue(IPC_CPU1_L_CM_R, &messageQueue, IPC_INT1, IPC_INT1); IPC_initMessageQueue(IPC_CPU1_L_CM_R, &messageQueue, IPC_INT2, IPC_INT2);
case2:
IPC_MessageQueue_t messageQueue;IPC_Message_t TxMsg1, RxMsg1;IPC_Message_t TxMsg2, RxMsg2;
IPC_initMessageQueue(IPC_CPU1_L_CM_R, &messageQueue, IPC_INT1, IPC_INT1);
,
Green Deng:
你好,很抱歉由于后期无法继续服务论坛了,而这个问题应该短期内我这边没办法解决,你方便在这个帖子的基础上发布一个相关贴吗?届时会有其他工程师来回复你的问题。
,
user78960159:
好的 感谢您一直以来的帮助 我把这个问题重新发帖
,
Green Deng:
客气了,也感谢一直以来对论坛的关注。