器件型号:MCU-PLUS-SDK AM64X-AM64X
我尝试在回调模式下使用 RPMessage 功能、我想确认我的理解是否正确。 您能回顾以下几点吗?
1.
在 ipc_rpmsg.c 中的函数 int32_t RPMessage_controlEndPtInit (void) 中、实现了以下行为:
当 localEndPt 等于 RPMESSAGE_CTRL_ENDPOT_ID 时、调用回调函数 RPMessage_controlEndPtHandler。
2.
回调函数 RPMessage_controlEndPtHandler 的返回类型应为 Message_Recv rp.callback、而不是 void。
我问,因为我发现以下帖子表明使用 void 不起作用的人:
https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1203769/mcu-plus-sdk-am243x-rpmessage-with-callback-interrupt
3.
当 localEndPt 设置为不是 RPMESSAGE_CTRL_ENDPOINT_ID 的值时、应该可以配置 RPMessage、以便调用不同的回调函数。
4.
如果我编写如下所示的代码、我相信将为本地端点 0 到 6 触发回调函数 RP Message_User_Callback_Handler:
for (int i = 0 ; i < 7 ; i++)
{
RPMessage_CreateParams_init(&createPrms);
createPrms.localEndPt = i;
createPrms.recvCallback = RPMessage_User_Callback_Handler;
status = RPMessage_construct(&gIpcRpmsgCtrl.controlEndPtObj, &createPrms);
if (SystemP_SUCCESS != status)
{
break;
}
}
5.
回调注册在调用 RPMessage_construct 时执行、并且对何时调用 RPMessage_construct 没有限制(即,可以在应用程序中自由添加或删除回调)。
您能否确认上述理解是否正确?