首页 > 解决方案 > 将 C++ 成员函数作为回调函数传递

问题描述

我正在尝试在 STM32 中使用回调寄存器。我正在用 C++ 编写大部分接口,希望有朝一日完全独立于 HAL,但我目前正在使用它来加快开发速度。

我正在定义一个 UART 类,并为我定义的每个 UART 外围设备调用它。现在我启用了 CallBacks,并且我相信我可以定义一个回调函数并将其作为指针传递。Rx CallBack 定义如下

  void (* RxCpltCallback)(struct __UART_HandleTypeDef *huart);            /*!< UART Rx Complete Callback             */

这是当 Rx 缓冲区已满时对该回调的调用

#if (USE_HAL_UART_REGISTER_CALLBACKS == 1) /*Call registered Rx Half complete callback*/
huart->RxCpltCallback(huart);

在我的课程中,我计划有一个 CallBack 函数,并在我的初始化中将它的指针传递给这个函数。

但遗憾的是它不知道如何将类的成员函数转换为函数。

这是我在该部分的构造函数中的代码

uartx.RxCpltCallback=rx_cplt_callback;

这是我班级中回调函数的代码

void uart::rx_cplt_callback(__UART_HandleTypeDef* uart_)

这是它在尝试编译时给我的错误代码。

cannot convert 'uart::rx_cplt_callback' from type 'void (uart::)(__UART_HandleTypeDef*)' to type 'void (*)(__UART_HandleTypeDef*)'
   26 |     uartx.RxCpltCallback=rx_cplt_callback;

老实说,我不知道如何在课堂外不编写代码的情况下解决这个问题。是的,可以肯定的是,我可以在将我引导到该函数的类中编写函数,但这会破坏目的。

非常感谢。

问候利雅得

标签: c++embeddedstm32

解决方案


推荐阅读