[英]Convert void (*)() to void (*)(unsigned char)
我正在嘗試將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”聲明為函數,返回函數void 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);
}
為什么不只是編寫一個函數來進行重定向,即
void redirectFunction(unsigned char)
{
handler();
}
然后
gpio_set_interrupt(pin, GPIO_INTTYPE_EDGE_ANY,redirectFunction);
編輯
也許在C ++中是這樣的:
void redirectFunction(std::function<void()> handler, unsigned char)
{
handler();
}
void wibble() { }
gpio_set_interrupt(pin, GPIO_INTTYPE_EDGE_ANY,
std::bind(redirectFunction, _1, wibble)
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.