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.

[参考译文] RPMessage Callback:关于在回调模式下注册 MCU-PLUS-SDK 回调

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1629096/mcu-plus-sdk-am64x-about-registering-rpmessage-callbacks-in-callback-mode

器件型号: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 没有限制(即,可以在应用程序中自由添加或删除回调)。

您能否确认上述理解是否正确?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 ipc_rpmsg.c 中的函数 int32_t RPMessage_controlEndPtInit (void) 中、实现了以下行为:
    当 localEndPt 等于 RPMESSAGE_CTRL_ENDPOINT_ID 时、调用回调函数 RPMessage_controlEndPtHandler。

    是的、正确。

    回调函数 RPMessage_controlEndPtHandler 的返回类型应为 Message_Recv RPM-Callback、而不是 void。

    正如我在驱动程序代码中看到的那样、 RPMessage_controlEndPtHandler() 没有返回任何值、因此这里的返回类型 void 是正确的。

    [引述 userid=“649787" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1629096/mcu-plus-sdk-am64x-about-registering-rpmessage-callbacks-in-callback-mode

    当 localEndPt 设置为不是 RPMESSAGE_CTRL_ENDPOINT_ID 的值时、应该可以配置 RPMessage、以便调用不同的回调函数。

    [/报价]

    在上面、您是指为不同于 RPMESSAGE_CTRL_ENDPODT_ID 的端点配置回调函数吗?

    如果我编写如下所示的代码、我相信将为本地端点 0 到 6
    触发回调函数 rp Message_User_Callback_Handler。

    是的、以上都是正确的。

    调用 RPMessage_construct 时执行回调注册、并且对何时调用 RPMessage_construct 没有限制(即,可以在应用程序中自由添加或删除回调)。

    是的、您可以 RPMessage_construct 在应用程序中调用 API。

    此致、

    Tushar

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

    尊敬的 Tushar-san:

    非常感谢您的明确回答。
    我已经审核了您的评论、现在我正确理解了您的行为。

    关于您的问题:

    >“以上所述、您是指为不同于 RPMESSAGE_CTRL_ENDPODT_ID 的端点配置回调函数吗?“

    是的—这正是我的意思。
    RPMESSAGE_CTRL_ENDPOINT_ID‑确认,对于除以外的端点,可以通过分配用户定义的回调函数RPMessage_construct,您的解释已经澄清了这一点。

    再次感谢您的支持。

    此致、
    Hoshina Hiroki