c++ - 带有参数的嵌入式系统上的最小 C++ 回调
问题描述
我正在嵌入式系统上用 C++ 开发。由于资源限制,我不允许std::function
用于我的回调。
我想从软件的上层注册一个回调,并在一个非常低级的驱动程序中执行它。问题是这个回调还需要将参数作为数组传递,我想避免使用全局变量。
低级驱动程序:
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
}
目前我无法以任何可能的方式注册我的回调。我知道我的回调是错误的,或者我尝试在应用程序层中注册它的方式是错误的。需要帮忙。
编辑:不管这个设计有多糟糕。我正在寻找以下内容:基本上只是一种带有参数的回调方法。
解决方案
推荐阅读
- ios - 如何用 portalItem 替换层 url 以用于离线 Arcgis 运行时 sdk
- c++ - 构建控制台应用程序文件资源管理器 C++
- r - 为什么只显示一些刻度线,我怎样才能显示所有刻度线?
- swift - 在 Ubuntu 上使用 Swift 创建 PDF 文件
- excel - 如何使用 VBA 在 Sharepoint 上使用通配符打开 Excel 文件
- visual-studio - 配置没有 Internet 访问权限的 TFS 2018 构建代理
- python - 批处理文件以监视两个 python 脚本是否正在运行
- google-api-java-client - Google Play Developer API 延迟请求错误 - 订阅的预期到期时间无效
- ios - UIBezierPath :仅制作绘图图像
- mesh - 在网格挤出期间计算 UV 坐标