将 void (*)() 转换为 void (*)(unsigned char)

亚历山大

我正在尝试将 a 转换为void (*)()void (*)(unsigned char)但我在 C++ 方面的知识还不够好。我搜索过,但找不到任何示例。所以我想创建一个函数的函数,但我得到了一些错误:

typedef void (* voidFuncPtr)();
void castHandler(voidFuncPtr handler)(uint8_t gpio_num)
{
    handler();
}

void attachInterrupt(uint8_t pin, voidFuncPtr handler, int mode)
{
    // typedef void (* voidFuncPtr)();
    // typedef void (* gpio_interrupt_handler_t)(uint8_t gpio_num);
    // typedef void (* gpio_interrupt_handler_t)(unsigned char)
    gpio_set_interrupt(pin, GPIO_INTTYPE_EDGE_ANY, castHandler(handler));
}

错误:'castHandler' 声明为函数返回一个函数 void castHandler(voidFuncPtr handler)(uint8_t gpio_num)

错误:'castHandler' 未在此范围内声明 gpio_set_interrupt(pin, GPIO_INTTYPE_EDGE_ANY, castHandler(handler));

有人能帮我吗?

尤金·S。

您需要为每个 GPIO 维护一个处理程序表。类似于以下(未经测试且不完整 - 省略了一些初始化和错误检查)代码:

typedef void (* voidFuncPtr)();

voidFuncPtr handlers[MAX_HANDLERS];

void attachInterrupt(uint8_t pin, voidFuncPtr handler, int mode)
{
    handlers[pin] = handler;
}

void handleGPIO(unsigned char pin)
{
    if (handlers[pin])
        handlers[pin]();
}

void enableGPIOInterrupts(void)
{
    /// Do this for each available pin
    gpio_set_interrupt(pin, GPIO_INTTYPE_EDGE_ANY, handleGPIO);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将const char **转换为void *?

来自分类Dev

将地址转换为函数:使用“ void * void”

来自分类Dev

将void函数转换为char * C ++

来自分类Dev

将ListenableScheduledFuture <Void>转换为ListenableFuture <SomethingElse>

来自分类Dev

将void *转换为动态类型

来自分类Dev

将int转换为void *

来自分类Dev

将void(__ cdecl MyClass :: *)()转换为void *时出错

来自分类Dev

无法从char *转换为void **

来自分类Dev

无法将void转换为java.lang.Void

来自分类Dev

无法将'void(MyClass :: *)()'转换为'void(*)()

来自分类Dev

将Swift结构转换为UnsafeMutablePointer <Void>

来自分类Dev

void *类型转换为char *的增量失败

来自分类Dev

将QString转换为const void *

来自分类Dev

将char *内存地址转换为void *并返回到C

来自分类Dev

将int函数转换为void *

来自分类Dev

无法将void转换为ICommand

来自分类Dev

将void *转换为int并返回

来自分类Dev

如何将“ void(MyClass :: *)(int)”转换为“ void(*)(int)”?

来自分类Dev

C:将void(*)(void *)转换为void(*)(char *)

来自分类Dev

将std :: function <void()>转换为void(*)()

来自分类Dev

将void函数转换为char * C ++

来自分类Dev

是否可以将void *转换为char **?

来自分类Dev

将ListenableScheduledFuture <Void>转换为ListenableFuture <SomethingElse>

来自分类Dev

将void *转换为动态类型

来自分类Dev

将void *(不带\ 0的char *)转换为std :: string

来自分类Dev

将void(__ cdecl MyClass :: *)()转换为void *时出错

来自分类Dev

无法将void转换为double

来自分类Dev

将static void *强制转换为NSObject *

来自分类Dev

将char *内存地址转换为void *并返回到C

Related 相关文章

热门标签

归档