《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字节 |