完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想问一下,如果我在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个回答
|
|
在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`。 |
|
|
|
只有小组成员才能发言,加入小组>>
545浏览 6评论
457浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
437浏览 5评论
441浏览 4评论
411浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 04:11 , Processed in 0.816339 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号