![]() |
1
1
无论如何,正因为如此,三个以上的缓冲区没有多大用处(两个也需要仔细考虑)。您不需要更多缓冲区。但是,缓冲区应该比计算出的每帧标称采样数稍长,并且端点描述符应该包含此扩展长度。 总是 打开并仅在USB帧开始时(或与USB SOF同步的任何其他事件)切换缓冲区。 当USB主机想要从您的端点读取数据时,您的设备必须返回当前读取缓冲区中实际存在的样本数。不多不少。 因此,不存在跑输的机会。当之前读取的缓冲区未完全填满时,您只需向主机发送较少数量的样本,主机的任务是以任何合适的方式处理时钟漂移和重新采样。你 另一方面,担心超支。若SOF频率和ADC的采样率相比太低,你们可以在SOF到来之前填满整个缓冲区,最终并没有地方进行下一个采样。简单的解决方法是使您的缓冲区比计算的标称速率至少长几个样本。那么你应该是安全的,否则其他地方的东西可能已经坏得多了。 您可能担心的最后一个问题是,当SOF正常运行时,主机不会向您的端点发送读取请求。好的,在这种情况下,覆盖旧的缓冲区不会造成太大的伤害,因为主机此时显然对数据不感兴趣,而缓冲东西——从而增加延迟——可能弊大于利。 |
![]() |
JeffreyH · 需要解释InvenSenses运动驱动程序 7 年前 |
|
gotti123 · 在MCU上查找Pin 7 年前 |
![]() |
frank_010 · 在32位字存储器中连续读取3个字节 7 年前 |
![]() |
LOSnel · 干扰irq将我从睡眠模式唤醒 7 年前 |
![]() |
Juliano · ili9341不处理STM32f4发现 7 年前 |
![]() |
yun · USB音频缓冲区欠载 7 年前 |
![]() |
puzzled · 全球结构不起作用[关闭] 7 年前 |
![]() |
Aimal · Elf十六进制表示法 7 年前 |
![]() |
girikks · 结构值未在主源文件中更新 7 年前 |
|
user8235882 · 未在操作系统C中执行的for循环 7 年前 |