打印
[技术问答]

NUC505 USB 虚拟串口的一个Bug

[复制链接]
655|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
seawwh|  楼主 | 2020-4-16 09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
NUC505_Series_BSP_CMSIS_V3.03.001/SampleCode/USBD_VCOM_SerialEmulator

vcom_serial.c 中有下列定义

#define EPA_MAX_PKT_SIZE        512
uint8_t gRxBuf[64] = {0};

   if(i32Len > EPA_MAX_PKT_SIZE)
       i32Len = EPA_MAX_PKT_SIZE;

    for(i=0; i<i32Len; i++) {
        gRxBuf[i] = comRbuf[comRhead++];
        if(comRhead >= RXBUFSIZE)
             comRhead = 0;
     }
  由于gRxBuf的大小只有64字节,而赋值循环的最大值是512,这样就可能会导致写越界。
  我是在发送较大数据包时发现这个Bug的,改正方法是:
将   uint8_t gRxBuf[64] = {0};
改为 uint8_t gRxBuf[EPA_MAX_PKT_SIZE] = {0};

使用特权

评论回复
沙发
xuanhuanzi| | 2020-4-16 22:10 | 只看该作者
哈哈,估计是程序员失误,忘了。

使用特权

评论回复
板凳
xuanhuanzi| | 2020-4-16 22:11 | 只看该作者
楼主非常棒,这个如果不深入理解,真难以发现。

使用特权

评论回复
地板
天灵灵地灵灵| | 2020-4-16 23:16 | 只看该作者
666的操作。

使用特权

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

本版积分规则

145

主题

368

帖子

1

粉丝