打印
[ZLG-ARM]

《ARM嵌入式软件开发实例(一)》USB驱动程序有错

[复制链接]
1109|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wahahaabc|  楼主 | 2007-9-6 08:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
《ARM嵌入式软件开发实例(一)》P212 USB_ReadISR()函数有错,
例如:优先级为0的任务要从端点索引2(就是端点1OUT)读取100字节,由于端点索引2
的包大小为16字节,所以,需要读7次,我们来看一下第7次端点索引2 out中断时,调用
USB_ReadISR()函数会发生什么。当产生第7次端点索引2OUT中断调用USB_ReadISR()函数时,pUsb->Max[0]为100,
pUsb->Cnt为96,执行len=pUsb->Max[0]-pUsb->Cnt以后,len为4,则继续向下执行
len=(INT8U)D12_ReadEndpoint(endp,(INT8U)len,pBuff+pUsb->Cnt);
如果第7次端点索引2OUT中断接收到的数据是16字节,那么,上述代码只读取了前4个字节,
后面的12字节被扔掉,此时,优先级为0的任务是接收到了100字节的数据,这没有错,
但是,根据P203的设计思想,如果等待列表中还有其它任务(除了优先级为0的任务)在等待接收,则应该把后12字节存入
等待列表中优先级最高的那个任务的缓冲区,而不是扔掉后面的12字节

相关帖子

沙发
wahahaabc|  楼主 | 2007-9-6 17:33 | 只看该作者

怎么没人

怎么没人

使用特权

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

本版积分规则

119

主题

627

帖子

0

粉丝