Что такое «WriteCallback» в C ++ для Arduino? - PullRequest
1 голос
/ 12 июня 2019

В библиотеке, которую я использую, есть тип 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 Ответ

2 голосов
/ 12 июня 2019

typedef void (*WriteCallback) (const byte what); определяет указатель функции тип , который принимает 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...