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;
也没必要弄两个缓冲区吧 你可以发完之后清掉数据啊,这样不就好了么 其实MCU很多都是单线程的,所以一个缓冲区是可以用的 不建议弄很多缓冲区的,容易造成内存溢出 这可能人家考虑的就是普通的演示用而已 你不会是发送或者接收完之后,没清数据吧 其实你的方式也挺好,但适合MCU大存储的时候应用 加缓冲区得注意单片机的存储哈,别弄超了 使用完数据清掉不就好了么 看你程序逻辑,不过一般2个缓冲区也是OK的
页:
[1]