This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我尝试使用 USB 环形缓冲器 来处理通过 CAN 传入的一些数据。 我可以将其初始化为我喜欢的任何大小(我需要大约512)、一切都很好。 但是、如果我尝试添加超过64的数据、我会遇到错误。
是否在某个地方有一个硬限制编码、以防止索引超过63?
尊敬的 Patrick:
您能不能显示您的代码、在这里、您可以将环形缓冲区大小指定为512、以及如何将数据添加到环形缓冲区。 如需了解更多相关信息、我们的 USB 专家可以更轻松地发表评论。
好的。 我要这么做。
但是现在 USBRingBuffer?没有硬性限制。 它就像任何其他数据结构一样、仅受存储器和智能编程的限制?
任何溢出、流量不足、索引问题等 都可能与代码相关。
尊敬的 Patrick:
Ring 缓冲区应该是一个基于软件的数据结构,它使用固定大小的缓冲区。 大小应受内存量的限制。
您是否尝试将 USB 环形缓冲器实现方案重复用于 CAN 数据接收? 昨天晚上我没有仔细阅读您的问题。 如果是这种情况、您需要自行进行一些调试。 我不建议您将 USB 环形缓冲器重复用于其他外设、因为我们没有看到任何人这样做。 如果您可以让它用于其他出色的外设、并且您可以与社区分享。 尽管如此、在应用中处理环形缓冲器可能会更容易。
最后回到这个问题
//declarations
#define Rb_size 64
uint8_t incoming_message[RB_SIZE];
tUSBRingBufObject Incoming_traffy_buffer;
在 main I run 中:
USBRingBufInit (&Incoming_traffer_buffer、Incoming_message、rb_size);
写入缓冲器的示例是
USBRingBufWrite (&Incoming_traffect_buffer、(incoming.pui8MsgData+1)、(incoming.ui32MsgLen-1));
读数的一个示例是:
USBRingBufRead (&Incoming_traffer_buffer、ReadServiceResponse、Incoming_message_length);
写入和读取在一个事务中完成。 即请求数据、从机器获取数据、放入缓冲区、从缓冲区读取数据并执行操作。
在我需要接受一些更大的任务之前、环形缓冲器使它变得非常容易。 只要上述#define Rb_size 为64或更小、我就没有问题
将其提高到65或更高、所有这些都崩溃。 我认为上述说法没有任何根本错误。 如果有任何帮助,将不胜感激。
患者
已经尝试过。 运气差。
我只是总结我的代码中发生了一些更阴险的事情。 一些边界错误、内存泄漏等
必须尝试重写。 可能是 USBRingBuffer 的结束。 嗯
尊敬的 Patrick:
[引用 user="Patrick murphy"] CAB 只是总结我的代码中发生了一些更阴险的事情。 某些边界错误、内存泄漏等[/引用]
正如 Charles 似乎建议的那样、请使用(ringbuffer.c) driverlib 工具文件夹。 USBRingBuffer()链接到 USB 库层,并在支持64字节数据包的复合 USB 设备结构之间进行网格化。 另一个缓冲模块可以轻松处理512字节数据包 ;-)