我有一个设备/dev/ACMTTY0 可以传输数据;或者更确切地说,现在是随机整数 0 - 100。
设备/dev/ACMTTY0 持续流式传输。
但是,我仍然不知道如何在 C++ 中将串行数据流读入数组 (正确地)现在,我正在尝试将它发送到屏幕上,以便我可以看到发生了什么。 当我运行我的程序时,会发生以下情况,我得到一些可能有效的数字,我得到一些 -1,然后程序在随机点退出。我打算它在 EOF 时退出,但它在此之前退出? EOF 适用于流吗?
sudo ./getc /dev/ttyACM0
53
50
10
56
-1
-1
无论如何,我不应该得到 -1,所以我不知道那是什么。 此外,数字仍在流式传输。所以我不明白为什么程序退出。 对于更奇怪的行为,程序可能会在退出前流式传输数百个数字,或者可能流式传输 2。
我这里有什么地方做错了吗?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <inttypes.h>
#include <iostream>
int main (int argc, char ** argv)
{
using namespace std;
FILE * pFile = NULL;
int c = 0;
pFile = fopen(argv[1], "r");
// pFile=fopen ("fake.dat","r");
if ( !(pFile = fopen(argv[1], "r")) ) {
std::cout << argv[1] << " Couldn't open serial port for communication.\n";
exit(EXIT_FAILURE);
}
if (pFile == NULL) perror ("Error opening file");
else
{
do {
c = getc (pFile);
std::cout << c << "\n";
} while (c != EOF);
fclose (pFile);
std::cout << c << "\n";
//sleep(2);
}
return 0;
}
我可以很好地读取我的假数据(文件)。
最佳答案
您像读取文件一样读取设备并解析它。让我们假设流:
$1,2,3,4...$4,5,6,7
$ 是你的哨兵角色。在看到 $ 之前您不能做任何事情,所以只需丢弃任何前导数字。然后你会反复寻找下一个逗号,找出数字并自动生成它们。自然地,您会在 $ 处将热电偶编号重置为零,并在每个逗号处递增它。如果你幸运的话,atoi 不会提示逗号,所以你甚至不需要在 atoi-ing 之前将数字复制到其他任何地方,但我不确定。
关于c++ - 从串行设备读取数据到数组 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26193329/