C ++ for Arduino中的“ WriteCallback”是什么?

时间:2019-06-12 07:17:45

标签: c++11 arduino

在我使用的库中,有一个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);

1 个答案:

答案 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);