typedef void (*CB_RECV)(char *, int *);这段代码什么意思
时间: 2023-02-14 16:35:07 浏览: 102
这段代码定义了一种新类型: `CB_RECV`, 它是一个指向函数的指针, 函数的原型为: `void (*)(char *, int*)`.
具体地说, `CB_RECV` 是一个指向函数的指针, 这个函数有两个参数:
- 一个指向字符串的指针 (`char *`)
- 一个指向整型的指针 (`int *`)
这个函数的返回值类型是 `void`, 也就是没有返回值.
`typedef` 关键字是用来为类型起别名的. 在这里, `CB_RECV` 是为函数指针起的别名.
相关问题
如何在typedef void (*CB_RECV)(char *, int *)加入两个参数
你可以使用如下方式加入两个参数:
```
typedef void (*CB_RECV)(char *, int *, <第三个参数类型> <第三个参数名称>, <第四个参数类型> <第四个参数名称>);
```
例如:
```
typedef void (*CB_RECV)(char *, int *, int num, float ratio);
```
这样, 你就在`CB_RECV`中加入了两个新参数: `num` 和 `ratio`.
esp32 espnow代码
以下是一个简单的 ESP32 ESP-NOW 的示例代码:
```c++
#include <esp_now.h>
#include <WiFi.h>
//定义接收方的MAC地址
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
//定义 ESP-NOW 数据结构
typedef struct struct_message {
char data[50];
int node_id;
} struct_message;
//回调函数,当有数据接收时会调用此函数
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
struct_message *message = (struct_message *)data;
Serial.print("Received data from node: ");
Serial.println(message->node_id);
Serial.print("Data: ");
Serial.println(message->data);
}
void setup() {
Serial.begin(115200);
// 初始化 ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// 注册回调函数
esp_now_register_recv_cb(OnDataRecv);
// 添加接收方
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("Failed to add peer");
return;
}
Serial.println("ESP-NOW receiver ready");
}
void loop() {
delay(1000);
}
```
这个代码将 ESP32 设置为接收方,并在接收到数据时打印出来。要将 ESP32 作为发送方,请查阅 ESP-NOW 发送方的相关代码。
阅读全文