我正在用c ++在嵌入式系统上进行开发。由于资源限制,我不允许在回调中使用std::function
。
我想从该软件的上层注册一个回调,并在一个非常低级的驱动程序中执行它。关键是此回调还需要将参数作为数组传递,而我想避免使用全局变量。
low_level_driver:
using callback = void (*)(uint32_t data[2]);
// extern C because it is executed inside an c style interrupt,don't ask
extern "C" {
static callback global_cb = nullptr;
void ExecuteCallback(uint32_t data[2]) {
if (global_cb != nullptr) {
global_cb(data);
}
}
void Interrupt() {
// Error occured
uint32_t logData[2] = { 0,1}; // Dummy data for stackoverflow
ExecuteCallback(logData);
}
}
void low_level_driver::RegisterCallback(callback cb) {
global_cb = cb;
}
应用层如下所示:
#include "low_level_driver.h"
ResetHandler::ResetHandler() {
low_level_driver.RegisterCallback(MyCallback);
}
void ResetHandler::MyCallback(uint32_t logData[2]) {
// log the Data
}
当前,我无法以任何可能的方式注册我的回调。我知道我的回调错误,或者我如何尝试在应用程序层内部注册它是错误的。需要帮助。
编辑: 无论这种设计有多糟糕。我正在寻找以下内容: 基本上只是一种带有参数的回调的方法。