在我使用的库中,有一个WriteCallback类型。我不知道它是什么,我找不到它在任何地方定义?
有人可以告诉我什么是WriteCallback吗?是本机函数还是c ++中的类型?
.h文件
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WConstants.h"
#endif
typedef void (*WriteCallback) (const byte what); // send a byte to serial port
typedef int (*AvailableCallback) (); // return number of bytes available
typedef int (*ReadCallback) (); // read a byte from serial port
void sendMsg (WriteCallback fSend,
const byte * data, const byte length);
byte recvMsg (AvailableCallback fAvailable, ReadCallback fRead,
byte * data, const byte length,
unsigned long timeout = 500);
答案 0 :(得分:2)
typedef void (*WriteCallback) (const byte what);
定义了一个function pointer 类型,该类型采用一个const byte
并返回一个void
。它用于轻松使用函数指针。就像uint8_t
使用typedef
定义为:typedef unsigned char uint8_t;
一样,它是8位宽度变量的简单速记。
一个示例用法是:
typedef void (*WriteCallback) (const byte what);
void sendMsg (WriteCallback fSend, const byte * data, const byte length);
void callbackfunction(const byte what) { /*do stuff*/ }
通过函数调用:
sendMsg(&callbackfunction,0);
内部sendMsg
会调用fSend
变量指向的函数,在这种情况下为callbackfunction
。
使用此typedef
可以轻松定义函数的指针,并根据示例切换使用的写回调。
Writecallback funcPtr;
void switchCallback(){
static int tmp = 0;
if(tmp)
funcPtr = &writecallbackA;
else
funcPtr = &writecallbackB;
tmp = (tmp) ? 0 : 1;
}
上述用法比:
更易于阅读和理解。void (*fun_ptr) (const byte what);