我正在尝试将void (*)()转换为void (*)(unsigned char),但是我对C ++的了解还不够。我进行了搜索,但找不到任何示例。所以我想创建一个函数function但出现了一些错误:

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”声明为函数,返回函数无效
  castHandler(voidFuncPtr handler)(uint8_t gpio_num)
  
  错误:在此范围内未声明“ castHandler”
       gpio_set_interrupt(pin,GPIO_INTTYPE_EDGE_ANY,castHandler(handler));


有人能帮我吗?

最佳答案

您需要维护每个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);
}

关于c++ - 将void(*)()转换为void(*)(unsigned char),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47336654/

10-10 17:50