乐鑫技术交流
直播中

王越建

8年用户 1530经验值
私信 关注
[问答]

在ROOT NODE用了mlink_httpd_read之后可以使用mwifi_root_read吗?

我想问一下,如果我在ROOT NODE用了mlink_httpd_read 之后可以使用mwifi_root_read 吗?

我在root node create 了这两个task
static void root_read_task(void *arg){    mdf_err_t ret               = MDF_OK;    mlink_httpd_t *httpd_data   = NULL;    mwifi_data_type_t mwifi_type = {        .compression = true,        .communicate = MWIFI_COMMUNICATE_MULTICAST,    };    MDF_LOGI("root_read_task is running");    while (esp_mesh_get_layer() == MESH_ROOT) {        ret = mlink_httpd_read(&httpd_data, portMAX_DELAY);        MDF_ERROR_GOTO(ret != MDF_OK || !httpd_data, FREE_MEM, "<%s> mwifi_root_read", mdf_err_to_name(ret));        MDF_LOGD("Root send, addrs_num: %d, addrs_list: " MACSTR ", size: %d, data: %.*s",                 httpd_data->addrs_num, MAC2STR(httpd_data->addrs_list),                 httpd_data->size, httpd_data->size, httpd_data->data);        mwifi_type.group = httpd_data->group;        memcpy(&mwifi_type.custom, &httpd_data->type, sizeof(mlink_httpd_type_t));        ret = mwifi_root_write(httpd_data->addrs_list, httpd_data->addrs_num,                               &mwifi_type, httpd_data->data, httpd_data->size, true);        MDF_ERROR_GOTO(ret != MDF_OK, FREE_MEM, "<%s> mwifi_root_write", mdf_err_to_name(ret)); FREE_MEM:        if (httpd_data) {            MDF_FREE(httpd_data->addrs_list);            MDF_FREE(httpd_data->data);            MDF_FREE(httpd_data);        }    }    MDF_LOGW("root_read_task is exit");    if (httpd_data) {        MDF_FREE(httpd_data->addrs_list);        MDF_FREE(httpd_data->data);        MDF_FREE(httpd_data);    }    mesh_mqtt_stop();    g_root_read_task_handle = NULL;    vTaskDelete(NULL);}static void root_read_mwifi_task(void *arg){    mdf_err_t ret = MDF_OK;    char *data    = MDF_MALLOC(MWIFI_PAYLOAD_LEN);    size_t size   = MWIFI_PAYLOAD_LEN;    mwifi_data_type_t data_type      = {0};    uint8_t src_addr[MWIFI_ADDR_LEN] = {0};    MDF_LOGI("root_read_mwifi_task is running");    while (mwifi_is_connected()) {        size = MWIFI_PAYLOAD_LEN;        memset(data, 0, MWIFI_PAYLOAD_LEN);        ret = mwifi_root_read(src_addr, &data_type, data, &size, portMAX_DELAY);        MDF_ERROR_CONTINUE(ret != MDF_OK, "<%s> mwifi_root_recv", mdf_err_to_name(ret));        if (data_type.upgrade) { // This mesh package contains upgrade data.            ret = mupgrade_root_handle(src_addr, data, size);            MDF_ERROR_CONTINUE(ret != MDF_OK, "<%s> mupgrade_root_handle", mdf_err_to_name(ret));        } else {            MDF_LOGI("Receive [NODE] addr: " MACSTR ", size: %d, data: %s",                     MAC2STR(src_addr), size, data);        }    }    MDF_LOGW("root_read_mwifi_task is exit");    g_root_read_mwifi_task_handle = NULL;    MDF_FREE(data);    vTaskDelete(NULL);}
mwifi 便有 error message
Code: Select all
W (14299) [mwifi, 1401]:  Uncompress, size: 663W (14531) [LIGHT_EXAMPLE, 198]:  mwifi_root_recv
求解。
                                    

回帖(1)

陈存楼

2024-7-1 15:21:55
在ESP-MDF(ESP-MESH Development Framework)中,`mlink_httpd_read` 和 `mwifi_root_read` 都是用于读取数据的函数。但是它们的用途和工作方式有所不同。

1. `mlink_httpd_read`:这个函数用于从HTTP服务器读取数据。当你在ROOT NODE使用这个函数时,它会从HTTP服务器获取数据,并将数据传递给MESH网络中的其他节点。

2. `mwifi_root_read`:这个函数用于从Wi-Fi网络读取数据。当你在ROOT NODE使用这个函数时,它会从Wi-Fi网络获取数据,并将数据传递给MESH网络中的其他节点。

在某些情况下,你可以在ROOT NODE中同时使用这两个函数。但是,你需要确保它们不会相互干扰。例如,你可以在不同的任务中使用它们,或者在同一个任务中使用不同的条件来调用它们。

在你提供的代码示例中,你创建了一个名为 `root_read_task` 的任务,该任务使用了 `mlink_httpd_read` 函数。如果你想在同一个任务中使用 `mwifi_root_read`,你可以添加一个条件判断,例如:

```c
static void root_read_task(void *arg)
{
    mdf_err_t ret = MDF_OK;
    mlink_httpd_t *httpd_data = NULL;
    mwifi_data_type_t mwifi_type = {
        .compression = true,
        // ...
    };

    // 条件判断,根据需要选择使用 mlink_httpd_read 或 mwifi_root_read
    if (条件1) {
        ret = mlink_httpd_read(httpd_data, ...);
    } else if (条件2) {
        ret = mwifi_root_read(...);
    }

    if (ret != MDF_OK) {
        MDF_LOGE("Failed to read data: %d", ret);
    }
}
```

请注意,这里的“条件1”和“条件2”需要根据你的具体需求来设置。这样,你就可以在同一个任务中根据条件选择使用 `mlink_httpd_read` 或 `mwifi_root_read`。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分