C 缓冲区指针
C Buffer pointer
问题
我目前正在使用带有 esp-idf 的 ESP-NOW。以下是他们的 espnow 示例的片段。我需要一些帮助来确定此行的含义,但我不太确定 google 是什么意思。有人可以指出正确的方向吗?
example_espnow_data_t *buf = (example_espnow_data_t *)send_param->buffer;
到目前为止我尝试了什么
我似乎无法在网上找到任何指南,因为我不确定要做什么 google。根据我能找到的内容,我的猜测是 send_param
缓冲区参数被解析为 example_espnow_data_t
的 buf
指针。我的理解正确吗?
示例代码
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));
.
.
}
您已经从结构 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;
无论如何,该函数接收一个指向结构 example_espnow_send_param_t
的指针作为输入变量 send_param
。有问题的行从该结构中选择字段 buffer
。据 example_espnow_send_param_t
所知,buffer
只是指向一些原始数据的指针。
然后将这个指向原始数据的指针转换为指向结构example_espnow_data_t
的指针——从而假设这是原始数据实际保存的内容。最后,它分配一个正确指针类型的新变量,并将转换的结果赋值给它。
问题
我目前正在使用带有 esp-idf 的 ESP-NOW。以下是他们的 espnow 示例的片段。我需要一些帮助来确定此行的含义,但我不太确定 google 是什么意思。有人可以指出正确的方向吗?
example_espnow_data_t *buf = (example_espnow_data_t *)send_param->buffer;
到目前为止我尝试了什么
我似乎无法在网上找到任何指南,因为我不确定要做什么 google。根据我能找到的内容,我的猜测是 send_param
缓冲区参数被解析为 example_espnow_data_t
的 buf
指针。我的理解正确吗?
示例代码
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));
.
.
}
您已经从结构 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;
无论如何,该函数接收一个指向结构 example_espnow_send_param_t
的指针作为输入变量 send_param
。有问题的行从该结构中选择字段 buffer
。据 example_espnow_send_param_t
所知,buffer
只是指向一些原始数据的指针。
然后将这个指向原始数据的指针转换为指向结构example_espnow_data_t
的指针——从而假设这是原始数据实际保存的内容。最后,它分配一个正确指针类型的新变量,并将转换的结果赋值给它。