gd32e103 usb库的不足

[复制链接]
1259|10
 楼主| gaonaiweng 发表于 2023-5-27 12:22 | 显示全部楼层 |阅读模式
在使用gd32e103 usbd_cdc_acm(虚拟串口)时,发现调用cdc_acm_data_receive和cdc_acm_data_send时,cdc_acm_data_send经常回复cdc_acm_data_receive接收到的数据,查看了cdc_acm_core.h头文件,可以发现数据结构usb_cdc_handler只有一个数据缓冲区,也就是说接收和发送共用一个数据缓冲区,如果是这样,在发送之前memset应该也是可以解决发什么回什么的,但程序运行的时候,还是会出现发什么回什么,解决这个问题,也很简单,在usb_cdc_handler中再添加一个数据缓冲区即可。
  1. #define USB_CDC_RX_LEN      64

  2. typedef struct {
  3.     uint8_t packet_sent;
  4.     uint8_t packet_receive;

  5.     uint8_t data[USB_CDC_RX_LEN];
  6.     uint8_t cmd[USB_CDC_CMD_PACKET_SIZE];
  7.     uint8_t tx_arr[USB_CDC_RX_LEN];                        // user added
  8.     uint32_t receive_length;

  9.     acm_line line_coding;
  10. } usb_cdc_handler;



Betty996 发表于 2023-7-12 15:38 | 显示全部楼层
也没必要弄两个缓冲区吧
Carina卡 发表于 2023-7-12 16:45 | 显示全部楼层
你可以发完之后清掉数据啊,这样不就好了么
Estelle1999 发表于 2023-7-12 17:48 | 显示全部楼层
其实MCU很多都是单线程的,所以一个缓冲区是可以用的
Charlene沙 发表于 2023-7-12 19:05 | 显示全部楼层
不建议弄很多缓冲区的,容易造成内存溢出
Alina艾 发表于 2023-7-12 20:09 | 显示全部楼层
这可能人家考虑的就是普通的演示用而已
Emily999 发表于 2023-7-13 07:41 | 显示全部楼层
你不会是发送或者接收完之后,没清数据吧
Annie556 发表于 2023-7-13 09:02 | 显示全部楼层
   其实你的方式也挺好,但适合MCU大存储的时候应用
Carmen7 发表于 2023-7-13 10:13 | 显示全部楼层
加缓冲区得注意单片机的存储哈,别弄超了
Belle1257 发表于 2023-7-13 11:24 | 显示全部楼层
使用完数据清掉不就好了么
alxd 发表于 2023-7-13 13:06 | 显示全部楼层
看你程序逻辑,不过一般2个缓冲区也是OK的

您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

875

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部