调了一天时间,发现STM32F10X的USB库的BUG

[复制链接]
 楼主| Simon21ic 发表于 2012-2-8 21:18 | 显示全部楼层 |阅读模式
貌似这个BUG历来已久,在一些特定情况下,会引起USB稳定性问题。

#define _ClearEP_CTR_RX(bEpNum)   (_SetENDPOINT(bEpNum,\
                                   _GetENDPOINT(bEpNum) & 0x7FFF & EPREG_MASK))
#define _ClearEP_CTR_TX(bEpNum)   (_SetENDPOINT(bEpNum,\
                                   _GetENDPOINT(bEpNum) & 0xFF7F & EPREG_MASK))

引发BUG的条件:
USB非中断操作,并且使用同一个端口的输入和输出。
中断方式操作的话,由于处理速度非常快,一般不会发生问题。

引发原因:
_ClearEP_CTR_RX和_ClearEP_CTR_TX意外清零CTR_TX和CTR_RX。

有问题的宏都贴出来了,看不懂打PP。
pkat 发表于 2012-2-8 21:34 | 显示全部楼层
有时间验证一下
cool_coder 发表于 2012-2-9 15:59 | 显示全部楼层
关注一下。
 楼主| Simon21ic 发表于 2012-2-9 16:08 | 显示全部楼层
呵呵,这个问题是一个非常不错的反面教材,刚刚开会教育了一下公司的开发人员,以后会作为我公司培训中的一个反面案例。
xsgy123 发表于 2012-2-9 16:12 | 显示全部楼层
是因为你公司的开发人员没有发现这个BUG吗
 楼主| Simon21ic 发表于 2012-2-9 16:15 | 显示全部楼层
本帖最后由 Simon21ic 于 2012-2-9 16:19 编辑

这个BUG貌似几年了,都没有被发现,只是要培养他们良好的开发习惯而已,在一定规模的协议栈下,即使一些非常小的问题,调试也会非常花时间。
我也只是在这个特定的应用环境下才发现这个BUG而已,大家不必在意。

另外,话说这个理应不叫BUG,按照一些IC厂家内部的说法,可以修复的只能叫“缺陷”。
txcy 发表于 2012-2-9 22:27 | 显示全部楼层
需要进一步完善的缺陷
秋天落叶 发表于 2012-2-9 22:43 | 显示全部楼层
良好的开发习惯还是很重要的
xblei 发表于 2012-2-10 08:46 | 显示全部楼层
领教了。
无冕之王 发表于 2012-2-10 17:35 | 显示全部楼层
不太好发现
kevin_ares 发表于 2012-2-11 23:27 | 显示全部楼层
看不出来,求打PP,求指导
kevin_ares 发表于 2012-2-13 10:12 | 显示全部楼层
难道 _GetENDPOINT 时 tx位为0
SetENDPOINT前一瞬间 ,硬件已经把tx置为1了,但程序还是按旧值写入,
 楼主| Simon21ic 发表于 2012-2-13 12:36 | 显示全部楼层
多任务平面下的原子性读写问题,忘记说现象了,对应USB ep会死掉,并且以一定概率发生
lxyppc 发表于 2012-2-13 13:34 | 显示全部楼层
我也有个对STM32 USB库的疑問没弄明白
https://bbs.21ic.com/icview-306802-1-1.html
kevin_ares 发表于 2012-2-13 13:50 | 显示全部楼层
多任务平面下的原子性读写问题,忘记说现象了,对应USB ep会死掉,并且以一定概率发生
Simon21ic 发表于 2012-2-13 12:36

那请问这应该怎么修改呢

有没有原子性的操作能将这两位置0?
 楼主| Simon21ic 发表于 2012-2-13 17:17 | 显示全部楼层
14# lxyppc
我用的是自己写的USB库,不是ST的库,你的问题应该直接去问ST代理的技术支持。
 楼主| Simon21ic 发表于 2012-2-13 17:18 | 显示全部楼层
那请问这应该怎么修改呢

有没有原子性的操作能将这两位置0?
kevin_ares 发表于 2012-2-13 13:50


都知道是什么原因引起的了,还修改不了吗?
 楼主| Simon21ic 发表于 2012-2-13 20:31 | 显示全部楼层
实际上,ST的USB库在轮询方式下,还有其他问题,不过这些都比较容易发现,主要是由于轮询操作方式,使得处理不及时,而引起的逻辑上的问题。不过,使用ST的库的话,还是建议直接使用中断方式,这样应该是没有问题的。这个帖子就到此结束了吧。
lxyppc 发表于 2012-2-14 10:16 | 显示全部楼层
14# lxyppc
我用的是自己写的USB库,不是ST的库,你的问题应该直接去问ST代理的技术支持。
Simon21ic 发表于 2012-2-13 17:17

楼主之前写过一个USB的stack,是那个库吗?
 楼主| Simon21ic 发表于 2012-2-14 21:45 | 显示全部楼层
就是那个,不过目前只有我一个人在用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:www.versaloon.com --- under construction

266

主题

2597

帖子

104

粉丝
快速回复 在线客服 返回列表 返回顶部