打印

gd32e103 usb库的不足

[复制链接]
643|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中再添加一个数据缓冲区即可。
#define USB_CDC_RX_LEN      64

typedef struct {
    uint8_t packet_sent;
    uint8_t packet_receive;

    uint8_t data[USB_CDC_RX_LEN];
    uint8_t cmd[USB_CDC_CMD_PACKET_SIZE];
    uint8_t tx_arr[USB_CDC_RX_LEN];                        // 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很多都是单线程的,所以一个缓冲区是可以用的

使用特权

评论回复
5
Charlene沙| | 2023-7-12 19:05 | 只看该作者
不建议弄很多缓冲区的,容易造成内存溢出

使用特权

评论回复
6
Alina艾| | 2023-7-12 20:09 | 只看该作者
这可能人家考虑的就是普通的演示用而已

使用特权

评论回复
7
Emily999| | 2023-7-13 07:41 | 只看该作者
你不会是发送或者接收完之后,没清数据吧

使用特权

评论回复
8
Annie556| | 2023-7-13 09:02 | 只看该作者
   其实你的方式也挺好,但适合MCU大存储的时候应用

使用特权

评论回复
9
Carmen7| | 2023-7-13 10:13 | 只看该作者
加缓冲区得注意单片机的存储哈,别弄超了

使用特权

评论回复
10
Belle1257| | 2023-7-13 11:24 | 只看该作者
使用完数据清掉不就好了么

使用特权

评论回复
11
alxd| | 2023-7-13 13:06 | 只看该作者
看你程序逻辑,不过一般2个缓冲区也是OK的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

697

帖子

3

粉丝