Иметь функцию:
void btCallback(esp_spp_cb_event_t event, esp_spp_cb_param_t *param) {
// ...
}
Нужно использовать в:
BT.register_callback(btCallback);
Ошибка компилятора:
no known conversion for argument 1 from 'void(esp_spp_cb_event_t, esp_spp_cb_param_t*)' to 'void (**)(esp_spp_cb_event_t, esp_spp_cb_param_t*)'
Насколько я понимаю, ему нужен указатель на функцию pointer. Я не знаю, как его создать. Пробовал функцию указателя (через &), не подходит.
Воспроизведение (PlatformIO/платформа: espressif32, плата: esp-wrover-kit, фреймворк: arduino):
#include <Arduino.h>
#include <BluetoothSerial.h>
BluetoothSerial BT;
void btCallback(esp_spp_cb_event_t event, esp_spp_cb_param_t *param) {
Serial.println("TEST");
}
void setup() {
Serial.begin(115200);
BT.begin("", true);
BT.register_callback(btCallback);
BT.connect("TEST");
}
void loop() { }
P.S. Является функцией arduino-esp32 BluetoothSerial::register_callback.
Единственный способ, которым я могу видеть, что это происходит, - это если кто-то возился с заголовками библиотеки.
Добавлен код воспроизведения.
Вам нужно сделать указательную переменную, а затем взять из нее указатель с помощью оператора &
.
void f()
{
// ...
}
void g(void (**p)())
{
// ...
}
int main()
{
void (*f_ptr)() = f;
g(&f_ptr);
}
Попробуйте, если здесь.
Насколько я понимаю, ему нужен указатель на функцию pointer. Я не знать, как его создать. Я пробовал указатель функции (через &), делает не подходит.
В предыдущем примере взятие &f
не имеет никакого эффекта. Эти две строки эквивалентны!:
void (*f_ptr)() = f;
void (*f_ptr)() = &f;
Поэтому, если вы делали:
g(&f);
вы фактически передаете простой указатель функции, а не указатель на указатель функции.
esp_spp_cb_t
естьvoid (*)(esp_spp_cb_event_t event, esp_spp_cb_param_t *param)
Показанная ошибка невозможна. Пожалуйста, опубликуйте минимальный воспроизводимый пример.