c++ - 从串行设备读取数据到数组 C++

标签 c++ arrays stream serial-port

我有一个设备/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/

相关文章:

c++ - 添加成员的声明会导致它隐式初始化?

c++ - 错误 :template declaration of auto function

java - Android Java - 为数组赋值时出现问题

java - 不兼容类型 int[] int

c++ - std::ofstream 无法在 win7/64 和 msvc2013 上使用 std::ios::ate 打开大文件

c++ - 如何检查字符串是否全部为小写字母和字母数字?

arrays - 计算嵌套数组 ExpressJS 中的项目数

c# - Http 响应返回的流不可作为响应查找。长度抛出 "unsupported"

python - Cython:使用 C++ 流

c++ - 移动构造函数模板省略