3

问题

我目前正在使用带有 esp-idf 的 ESP-NOW。以下是他们 espnow 示例的片段。我需要一些帮助来确定这条线的含义,但我不太确定谷歌是什么。有人可以指出我正确的方向吗?

example_espnow_data_t *buf = (example_espnow_data_t *)send_param->buffer;

到目前为止我尝试了什么

我似乎无法在网上找到任何指南,因为我不确定用谷歌搜索什么。根据我能找到的,我的猜测是send_param缓冲区参数被解析bufexample_espnow_data_t. 我的理解正确吗?

示例代码

example_espnow_send_param_t是一个typdef struct作为buffer参数之一。然后将发送参数分配并填充到send_param内存块中。然后将其传递给数据准备函数。

// code is truncated

typedef struct { // from header files
    bool unicast;                         //Send unicast ESPNOW data.
    bool broadcast;                       //Send broadcast ESPNOW data.
    .
    .
} example_espnow_send_param_t;

typedef struct { // from header files
    uint8_t type;                         //Broadcast or unicast ESPNOW data.
    .
    .
} __attribute__((packed)) example_espnow_data_t;

send_param = malloc(sizeof(example_espnow_send_param_t));
memset(send_param, 0, sizeof(example_espnow_send_param_t));
send_param->unicast = false;
send_param->broadcast = false;
.
.
example_espnow_data_prepare(send_param);

void example_espnow_data_prepare(example_espnow_send_param_t *send_param)
{
    example_espnow_data_t *buf = (example_espnow_data_t *)send_param->buffer;
    assert(send_param->len >= sizeof(example_espnow_data_t));
    .
    .
}

ESP32 回购

4

1 回答 1

1

您已经从 struct 的定义中截断了相关部分example_espnow_send_param_t - 字段buffer:)

/* Parameters of sending ESPNOW data. */
typedef struct {
    ...
    uint8_t *buffer;                      //Buffer pointing to ESPNOW data.
    ...
} example_espnow_send_param_t;

无论如何,该函数接收一个指向 structexample_espnow_send_param_t作为输入变量的指针send_parambuffer有问题的行从该结构中选择字段。buffer据了解,仅包含指向某些原始数据的指针example_espnow_send_param_t

然后它将这个指向原始数据的指针转换为指向结构的指针example_espnow_data_t- 从而假设这是原始数据实际保存的内容。最后,它分配一个正确指针类型的新变量并将转换结果分配给它。

于 2021-02-05T11:03:53.257 回答