【发布时间】:2013-12-30 15:28:35
【问题描述】:
我已经连接了一个通过串口发送数据的设备,通过 UART 和一个 USB 连接器。
在运行 ubuntu 的笔记本电脑上,我编写了一个 C++ 程序来读取并存储这些数据。 它发送 5 行,每行 15 次,每秒 100 次,意思是:每秒 500 行。
我使用标准的读取命令:
while((res += read(IMU, header, 15-res)) < 15);
string head(header, 15);
cout << indexLog << " " << head << endl;
当我读取串行端口并读取 15 位时,它显示:
0 snp�` �����
0 snp�b#A��H
0 snp�dP�O�^���
0 snp�\����f
0 snp�^���e��M
0 snp�` �����
0 snp�b"����
其中 snp 是每个包的开头。可以看出,我的笔记本电脑可以很好地读取每一口,因为每一行都以 snp 开头。
出于重量和尺寸方面的考虑,我想在我的 Raspberry PI 上运行相同的应用程序。
现在,当我在我的树莓派上运行相同的应用程序时,我得到:
0 �Nsnp�Nsnp
0 Nsnp�\��
0 vsnp�^���
0 np�^�O�
0 vsnp�^�O�
0 np�^�D�
0 ssnp�
0 X�snp�dU
看起来覆盆子并没有读完所有的内容,并且变得一团糟。试图挽救有用的日期会导致大量数据丢失。
我已经准备好安装 Rasbian 的精简版了,哎呀。将 X 作为 GUI 卸载。但这似乎没有什么区别。
我相信覆盆子应该足够快。
什么是限制因素?
对于 RasPI 来说,每秒读取 500 行(15 位)的串行速度是否足以应付?
是否有任何我可以更改的设置或树莓派的操作系统可以更好地完成这项工作? 或者在 C++ 中有没有一种方法可以更有效地读取数据?
亲切的问候
【问题讨论】:
-
如果您每秒只发送一行或几行,它是否能够获取所有内容?此外,您的第二个数据集似乎不是第一个数据集的子集,您确定要发送相同的数据吗?还要考虑到您可能会在 raspberry pi SE site 上找到专门的观众
-
您是否比较了两台机器上 'stty -a' 的值?
-
是的,我正在发送相同类型的数据。它是一个测量姿态和加速度的 IMU 设备。因此值可能不同,数据包的长度和数据量应该相同。 stty -a 给出:
-
stty -a 速度 38400 波特;第 22 行;第 80 列;线 = 0;在笔记本电脑上,速度为 38400 波特;第 24 行;第 80 列;线 = 0;在树莓上
-
感谢 Dennis 的建议,我也会将它发布到树莓堆栈交换中