typedef void (*esp_now_send_cb_t)(const uint8_t *mac_addr, esp_now_send_status_t status);
这个函数的参数能否多一个发送的缓冲区,因为如果我发送数据很频繁,来不及等发送完成就要发送下一个数据包,在发送队列里就有多个发送缓冲区,
这样我们才能知道什么时候可以释放或者修改这个缓冲区,
esp_now_register_send_cb的回调函数能否给出更多信息
Re: esp_now_register_send_cb的回调函数能否给出更多信息
两个 ESP-NOW 数据包的发送间隔太短可能导致回调函数返回混乱。因此,建议在等到上一次回调函数返回 ACK 后再发送下一个 ESP-NOW 数据
ESP-NOW 通常用于低速率的数据传输,如果你要频繁的发送数据可以描述一下你的使用场景吗?
ESP-NOW 通常用于低速率的数据传输,如果你要频繁的发送数据可以描述一下你的使用场景吗?
Re: esp_now_register_send_cb的回调函数能否给出更多信息
我们是采集大概100MS的音频数据,压缩后通过广播发送出去,
延时不能超过300MS,允许偶尔丢包,
如果不返回缓冲区,我只能开一个大队列盲写了,
其实回调返回MAC地址不如返回缓冲区地址,因为一般应用场景都是往固定的地址发送数据,如果要等到返回了才发第2包,那不符合异步处理的方法,会严重影响传输效率,
至于传输发送是否成功我觉得应该在应用层做,因为这函数应该是指是否发送成功,并不是对方的应用层是否收到了数据,
延时不能超过300MS,允许偶尔丢包,
如果不返回缓冲区,我只能开一个大队列盲写了,
其实回调返回MAC地址不如返回缓冲区地址,因为一般应用场景都是往固定的地址发送数据,如果要等到返回了才发第2包,那不符合异步处理的方法,会严重影响传输效率,
至于传输发送是否成功我觉得应该在应用层做,因为这函数应该是指是否发送成功,并不是对方的应用层是否收到了数据,
-
- Posts: 786
- Joined: Wed Nov 14, 2018 8:45 am
Re: esp_now_register_send_cb的回调函数能否给出更多信息
WiFi 底层是可以设比较大的 TX buffer 的,Component config → Wi-Fi 下的 Max number of WiFi dynamic TX buffers,考虑到你的应用场景仅使用 esp-now,可以往最大设。
这里就看你上层发送速度和底层发送速度谁快了,比如底层 1Mbps 发,你上层可以以最快多少发,需要做些测试,有可能盲发也是可以的。另外,有条件的话,可以通过抓包查看发送情况。
这里就看你上层发送速度和底层发送速度谁快了,比如底层 1Mbps 发,你上层可以以最快多少发,需要做些测试,有可能盲发也是可以的。另外,有条件的话,可以通过抓包查看发送情况。
Re: esp_now_register_send_cb的回调函数能否给出更多信息
那在esp_err_t esp_now_send(const uint8_t *peer_addr, const uint8_t *data, size_t len)函数返回的时候,data里的数据是否已经在WIFI底层的TX buffer了,还是在esp_now_send_cb的时候才在WIFI底层的TX buffer里,
如果是在esp_now_send返回的时候就在WIFI的TX buffer里了,我就可以不用申请内存空间,
如果是在esp_now_send返回的时候就在WIFI的TX buffer里了,我就可以不用申请内存空间,
-
- Posts: 786
- Joined: Wed Nov 14, 2018 8:45 am
Re: esp_now_register_send_cb的回调函数能否给出更多信息
是的,send 返回正确的话,数据已经丢到底层的 buffer 里了,如果底层没有 buffer 的话,会返回 ESP_ERR_ESPNOW_NO_MEM。
Who is online
Users browsing this forum: No registered users and 125 guests