分割核心错误c
Segmentation core error c
我对 C 编码不太熟悉,但我需要这个脚本来测试与微控制器的串行通信。我将以下代码写为:
int main() {
char *portname = "/dev/ttyACM0";
FILE *csv = fopen("~/Desktop/my.csv", "wb");
int fd = open(portname, O_RDWR | O_NOCTTY | O_SYNC);
if (fd < 0)
{
//error_message ("error %d opening %s: %s", errno, portname, strerror (errno));
return 1;
}
set_interface_attribs (fd, B9600, 0); // set speed to 9600 bps, 8n1 (no parity)
set_blocking (fd, 1); // set no blocking
char a = 255;
int i = 0;
write(fd, &a, 1);
do {
char c;
read(fd, &c, 1); // wait for next value
fprintf(csv, "%d\n", c);
i ++;
} while(i < 10000); //keep running this loop for a while
write(fd, &a, 1);
fclose(csv);
close(fd);
return 0;
这个脚本应该成功连接串行通信,发送一个起始位 (255) 到操作一些动作的接收器,然后开始将接收到的数据写入 csv 文件,直到 while 循环结束。已使用指令编译该源代码:
g++ -o serial c-serial.c
其中 c-serial.c 是源代码的名称。只需跳过两个 "set" 函数,它们在此范围内可见,因此不会出现错误。事实上,执行时我收到:
Segmentation fault (core dumped)
我该如何解决?
在您的 fprintf 语句中,您告诉程序打印一个整数(通常是两个字节),但提供一个 char 变量(一个字节)作为打印来源。 fprintf 依靠提供的格式字符串来决定从源中读取多少字节。在这种情况下,fprintf 尝试从一个单字节内存块中读取(至少)两个字节。因此 fprintf 将尝试访问甚至可能未分配给程序的内存,从而产生分段错误。
更正格式字符串以仅打印一个字符。
有关 fprintf 和格式字符串的更多信息,请参阅 here.
函数调用fopen is not able to resolve ~
as your home directory. Please take a look at how to open a file in user's home folder.
我对 C 编码不太熟悉,但我需要这个脚本来测试与微控制器的串行通信。我将以下代码写为:
int main() {
char *portname = "/dev/ttyACM0";
FILE *csv = fopen("~/Desktop/my.csv", "wb");
int fd = open(portname, O_RDWR | O_NOCTTY | O_SYNC);
if (fd < 0)
{
//error_message ("error %d opening %s: %s", errno, portname, strerror (errno));
return 1;
}
set_interface_attribs (fd, B9600, 0); // set speed to 9600 bps, 8n1 (no parity)
set_blocking (fd, 1); // set no blocking
char a = 255;
int i = 0;
write(fd, &a, 1);
do {
char c;
read(fd, &c, 1); // wait for next value
fprintf(csv, "%d\n", c);
i ++;
} while(i < 10000); //keep running this loop for a while
write(fd, &a, 1);
fclose(csv);
close(fd);
return 0;
这个脚本应该成功连接串行通信,发送一个起始位 (255) 到操作一些动作的接收器,然后开始将接收到的数据写入 csv 文件,直到 while 循环结束。已使用指令编译该源代码:
g++ -o serial c-serial.c
其中 c-serial.c 是源代码的名称。只需跳过两个 "set" 函数,它们在此范围内可见,因此不会出现错误。事实上,执行时我收到:
Segmentation fault (core dumped)
我该如何解决?
在您的 fprintf 语句中,您告诉程序打印一个整数(通常是两个字节),但提供一个 char 变量(一个字节)作为打印来源。 fprintf 依靠提供的格式字符串来决定从源中读取多少字节。在这种情况下,fprintf 尝试从一个单字节内存块中读取(至少)两个字节。因此 fprintf 将尝试访问甚至可能未分配给程序的内存,从而产生分段错误。
更正格式字符串以仅打印一个字符。 有关 fprintf 和格式字符串的更多信息,请参阅 here.
函数调用fopen is not able to resolve ~
as your home directory. Please take a look at how to open a file in user's home folder.