这是我第一次使用计算机与 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/