c++ - 使用 Linux 与 Arduino 通信

标签 c++ c linux file arduino

这是我第一次使用计算机与 Arduino 通信。我使用 Ubuntu 14.04。这是用于写入文件的 C 程序。 Arduino 显示 ttyACM0。

使用 gcc 编译时,编译器显示错误信息:

Segmentation fault(core dumped)

我该如何纠正这个错误。

#include<unistd.h>
#include<stdio.h>
int main() {
  char data[] = {'f','b','r'};  //Random data we want to send
  FILE *file;
  file = fopen("/dev/ttyACM0","w");  //Opening device file
  int i = 0;
  for(i = 0 ; i < 3 ; i++) {
    fprintf(file,"%c",data[i]); //Writing to the file
    fprintf(file,"%c",','); //To separate digits
    sleep(1);
  }
  fclose(file);
}

原谅我的无知。我试着研究它。无法让它发挥作用。预先感谢您的帮助。

最佳答案

您从 fopen() 得到一个 NULL 返回,NULL 被传递给 fprintf() 需要一个有效的 FILE* 并弄乱导致 SEGV

如果您使用 fopen,您应该检查它返回的内容,以便为用户提供比“段错误”更有用的信息。

fopen() 失败的可能原因是您没有使用串口的权限。

通常你需要dialout组才能访问串口。

作为 root 执行:

usermod -a -G dialout你的用户名

然后注销并重新登录,这样您就可以获得新组。

考虑使用 minicom 或 microcom(在其他几个串行终端程序中的任何一个上)访问串行端口,而不是自己编写。

我还建议您让 Arduino 在启动时发送一条问候消息,这样您就可以确定您的波特率是否正确...

关于c++ - 使用 Linux 与 Arduino 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27729979/

相关文章:

linux - Awk 格式化日期和其他行

c++ - 需要将16位数据转换成8位

c++ - 将值从 float 组传递到 double 组时的奇怪行为(C、C++)

c++ - `constexpr` 和 `const` 的区别

c - 如何仅在连续两个冒号后显示密码输入的星号?

c - 如何在 C 中将其他函数作为 main() 以外的入口点

linux - 为目录中的每个子目录创建一个 RAR 存档 - Centos/Ubuntu

访问说明符的 C++ 实现

c - 不正确的二叉树

c - 整数到字符串转换器(使用宏)