gaonaiweng 发表于 2023-5-27 12:22

gd32e103 usb库的不足

在使用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中再添加一个数据缓冲区即可。
#define USB_CDC_RX_LEN      64

typedef struct {
    uint8_t packet_sent;
    uint8_t packet_receive;

    uint8_t data;
    uint8_t cmd;
    uint8_t tx_arr;                        // user added
    uint32_t receive_length;

    acm_line line_coding;
} 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的

页: [1]
查看完整版本: gd32e103 usb库的不足