首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于在固件中存储串口数据的数据结构

用于在固件中存储串口数据的数据结构
EN

Stack Overflow用户
提问于 2009-06-13 08:00:29
回答 5查看 1.9K关注 0票数 5

我通过串口将数据从linux应用程序发送到嵌入式设备。

在当前的实现中,在固件中使用字节循环缓冲器。(只有一个具有读写指针的数组)当字节进入时,它被写入循环缓冲区。

现在,PC应用程序发送数据的速度似乎太快,固件无法处理。字节丢失会导致固件返回WRONG_INPUT的次数过多。

我认为波特率(115200)不是问题所在。固件端更有效的数据结构可能会有所帮助。对数据结构的选择有什么建议吗?

EN

回答 5

Stack Overflow用户

发布于 2009-06-13 08:05:39

没有什么比循环缓冲区更好的了。

您可以使用较慢的波特率或在固件中提高应用程序的速度,以便它可以全速处理数据。

如果PC的输出是突发的,这可能有助于使缓冲区大到足以处理一个突发。

最后一种选择是实现某种形式的流控制。

票数 1
EN

Stack Overflow用户

发布于 2009-06-13 11:10:25

你说的嵌入式设备是什么意思?我认为目前大多数的DSP和处理器都可以很容易地处理这种负载。问题不在于循环缓冲区,而在于如何从串行端口收集字节。

你的UART有硬件fifo吗?如果是,则应启用它。如果每个字节都有一个中断,那么很快就会遇到麻烦,特别是当您使用操作系统或虚拟内存时,IRQ成本可能会很高。

如果您的接收固件非常简单(没有多任务处理),并且您没有硬件fifo,那么轮询模式可能是比中断驱动更好的解决方案,因为这样您的处理器只接收UART数据,并且您没有中断开销。

另一个问题可能与传输协议有关。例如,如果你有一个很长的数据包,你必须进行校验和,并且你在数据包的末尾执行整个校验和,那么数据包的所有处理时间都在它的末尾,这就是为什么你可能会错过下一个数据包的开始。

所以循环缓冲区是很好的,你必须改进:-你与硬件交互的方式-协议(数据包长度,后缀等)

票数 1
EN

Stack Overflow用户

发布于 2009-06-14 11:45:42

在尝试解决问题之前,首先需要确定真正的问题是什么。否则,您可能会浪费时间尝试修复实际上并未损坏的东西。

如果不了解更多关于你的设置,就很难给出更具体的建议。但您应该进一步调查,以确定当字节进入时,硬件和软件当前到底在做什么,以及它们缺失的薄弱环节是什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/990269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档