今天在windows下连接ublox接收机接收数据,无论是ucenter,串口调试工具还是rtklib实时定位,都能够接收数据,但是利用rtklib源码解算却不行,错误定位在不能打开串口。今晚又在linux下调试,命令行下通过 cat /dev/[port]
可以正常接收数据,但是通过下面的程序仍旧无法打开串口:
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
int main()
{
int solu;
char msg[128];
char dev[128]= "/dev/ttyACM0";
if ((solu=open(dev,O_RDWR|O_NOCTTY|O_NONBLOCK))<0) {
sprintf(msg,"%s open error (%d)",dev,errno);
printf("%s\n",msg);
return 0;
}
else
printf("opened\n;");
return 0;
}
对上述程序在终端编译执行:
$ gcc main.c -o main
$ ./main
返回错误:
/dev/ttyACM0 open error (13)
突然想到通过 cat /dev/[port]
查看端口输出需要root权限,于是使用root权限运行:
$ sudo ./main
结果:
opened
所以想到windows下是不是也是这个原因,但是从来没在windows下有过这种情况!好吧这是明天的事了!
在此默默感谢一下毫无保留帮助我的朋友!
2019.04.06
补充:
rtklib在windows下打不开串口的问题,经过测试,如果把串口改成宽字符,就可以打开:
dev = CreateFile(L"COM7", rw, 0, 0, OPEN_EXISTING, 0, NULL);
或者在rtklib工程属性 -> 配置属性 -> 常规 -> 字符集 ,改为使用多字节字符集