本帖最后由 deru_qq 于 2020-4-3 08:43 编辑
调试VCP时发现的这个问题,用的是STM32F103C8,VCP接收使用了双缓冲端点,BUF0地址为0xE0,BUF1地址为0x120,分别对应实际的内存地址0x400061C0和0x40006240,接收长度都是64字节;仿真器调试发现,进入了端点的OUT中断后,假如刚刚接收使用的是BUF0,并且接收到的数据包长度为n,会发现,BUF0的偏移地址(n*2)和(n*2+1)里面的内容被修改了,如果n=64,那么(n*2)和(n*2+1)这两个地址就会延伸到BUF1的前2个字节,假如此时BUF1的内容还没有被读取,接收到的数据就会被破坏。对于BUF1也是如此,只不过受影响的是下一个端点的缓冲区。
这个问题不只是针对双缓冲,单缓冲同样有这个问题,只不过一般不会影响正常运行
有兴趣的朋友可以试一下,直接在端点OUT中断中设置断点就可以观察到
ST在相关的手册上好像没有描述过这个过程,但是却很明确的说设置的缓冲区不会溢出,接收数据包长度超过设置值时会被截断,大家一起来验证一下啊 |