完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
环境 win11 ESP IDF4.4.1 ESP32S3
测试用例代码如下: void tinyusb_cdc_rx_callback(int itf, cdcacm_event_t *event) { /* initialization */ size_t rx_size = 0; static uint32_t recv_total_len = 0; static uint32_t count = 0; /* read */ esp_err_t ret = tinyusb_cdcacm_read(itf, buf, CONFIG_TINYUSB_CDC_RX_BUFSIZE, &rx_size); if (ret == ESP_OK) { buf[rx_size] = '�'; ESP_LOGI(TAG, "Got data (%d bytes): %s", rx_size, buf); } else { ESP_LOGE(TAG, "Read error"); } } 在官方的CDC测试用例代码中,我尝试修改了RX TX FIFO大小,但是这个回调函数每次读取到的数据最大也就是64字节。修改了很多地方对这个值都没有影像。数据无论发送多快都是每次只接收到64字节。并且在一次回调中多次调用tinyusb_cdcacm_read接口,但是从第二次调用开始都会返回失败。 我想达到的目的是:加大缓冲区大小,尽量减少调用这个回调函数,减少cpu负载。 I (497) TinyUSB: TinyUSB Driver installed I (497) example: USB initialization DONE I (797) example: Line state changed! dtr:0, rst:0 I (857) example: Line state changed! dtr:0, rst:0 I (5697) example: Line state changed! dtr:0, rst:0 I (5707) example: Line state changed! dtr:0, rst:0 I (6597) example: Got data (64 bytes): test575275727527522752775242752427575375752752275242737527527521 I (6607) example: Got data (64 bytes): 2753753546546456456456456456456789789789643786789789789789789789 I (6617) example: Got data (50 bytes): 789546456456213123123123123123123123123123123123c7 I (8797) example: Got data (64 bytes): test575275727527522752775242752427575375752752275242737527527521 I (8807) example: Got data (64 bytes): 2753753546546456456456456456456789789789643786789789789789789789 I (8817) example: Got data (50 bytes): 789546456456213123123123123123123123123123123123c7 |
|
相关推荐
1个回答
|
|
要加大ESP32S3 USB CDC设备的缓冲区大小,您需要修改两个地方:配置文件和回调函数。
1. 修改配置文件: 首先,您需要找到ESP-IDF项目的配置文件,通常位于`sdkconfig`或`sdkconfig.defaults`。在该文件中,找到`CONFIG_TINYUSB_CDC_RX_BUFSIZE`配置项,将其值增加到所需的缓冲区大小。例如,如果您想要将缓冲区大小增加到4096字节,您可以这样修改: ``` CONFIG_TINYUSB_CDC_RX_BUFSIZE=4096 ``` 2. 修改回调函数: 在您的回调函数`tinyusb_cdc_rx_callback`中,您需要确保`buf`数组的大小与新的缓冲区大小相匹配。在函数的开始部分,声明一个足够大的数组来存储接收到的数据。例如,如果您将缓冲区大小设置为4096字节,您需要这样声明: ```c void tinyusb_cdc_rx_callback(int itf, cdcacm_event_t *event){ /* initialization */ size_t rx_size = 0; static uint32_t recv_total_len = 0; static uint32_t count = 0; /* Declare a buffer with the new size */ uint8_t buf[4096]; // Change this to the new buffer size /* read */ esp_err_t ret = tinyusb_cdcacm_read(itf, buf, CONFIG_TINYUSB_CDC_RX_BUFSIZE, &rx_size); ... } ``` 这样,您就成功地增加了ESP32S3 USB CDC设备的缓冲区大小。请确保重新编译并烧录您的固件以使更改生效。 |
|
|
|
只有小组成员才能发言,加入小组>>
321 浏览 0 评论
1178 浏览 1 评论
586浏览 6评论
483浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
468浏览 5评论
467浏览 4评论
442浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 12:24 , Processed in 0.713057 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号