esp-mdf icon indicating copy to clipboard operation
esp-mdf copied to clipboard

mwifi_write的阻塞问题

Open fzboffice opened this issue 4 years ago • 7 comments

在高频调用mwifi_write的时候 不规律地出现阻塞 最终锁定在mwifi_write->mwifi_subcontract_write->esp_mesh_send 这个函数 阻塞几乎都是3秒 返回的是ESP_OK 但是我的项目需求不允许阻塞 我想知道该怎么样才可以不阻塞 因为mwifi_write里有一个参数可以选择不阻塞 但是实际情况还是阻塞了 我的mdf是'release/v1.0'

fzboffice avatar Nov 19 '20 09:11 fzboffice

@fzboffice mesh上行发送数据是存在流控的,所以会存在阻塞状态。具体链接可以参考:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-guides/mesh.html。

Jiangyafeng avatar Nov 25 '20 13:11 Jiangyafeng

@fzboffice mesh上行发送数据是存在流控的,所以会存在阻塞状态。具体链接可以参考:https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-guides/mesh.html。

请问 我能做什么来取消这个流控或者减少阻塞时间吗

fzboffice avatar Nov 26 '20 00:11 fzboffice

mesh 上行发送数据是存在流控,下行发送数据是可以关掉流控,也就是将其 block = false。如果想取消上行发送的流控,那就要采用广播形式,就可以取消发送的流控,但是这个存在问题是消息不能保证全部接收到。 广播设置: uint8_t addr_any[] = MWIFI_ADDR_BROADCAST;

mwifi_data_type_t data_type = { .communicate = MWIFI_COMMUNICATE_BROADCAST, .group = false, };

mwifi_write(addr_any, &data_type, data, size, false);

这样发送可以取消流控限制。

Jiangyafeng avatar Nov 27 '20 06:11 Jiangyafeng

@Jiangyafeng 按照您这样说的去做 确实可以做到不阻塞了 我对于数据的到达保证性要求不高 但是广播终究还不是最佳解决方案,请问group发送 可以取消流控吗

fzboffice avatar Nov 27 '20 06:11 fzboffice

@fzboffice 对于设置为group,也不能取消流控。你可以增大 xon_qsize 值,看是否可以减少阻塞时间。即在 menuconfig->componet config-> MDF Mwifi -> Transmission config 中的 the number of mesh buffer queues 的值。

Jiangyafeng avatar Dec 02 '20 04:12 Jiangyafeng

@fzboffice 对于设置为group,也不能取消流控。你可以增大 xon_qsize 值,看是否可以减少阻塞时间。即在 menuconfig->componet config-> MDF Mwifi -> Transmission config 中的 the number of mesh buffer queues 的值。

但是奇怪的是,每一次发生阻塞都一定是3秒,我觉得挺不可思议的,到底为什么那么精确呢

fzboffice avatar Feb 24 '21 08:02 fzboffice

@Jiangyafeng 请问这个问题能帮助我解答一下吗 谢谢

fzboffice avatar Jun 04 '21 02:06 fzboffice