尝试打开串口的open()块

时间:2013-03-10 22:35:14

标签: c++ serial-port raspberry-pi

我有一个简单的C ++工具,它作为一个守护进程运行,并将继续从Debian下的串口读取数据(在本例中是Raspbian,因为它在RaspberryPi上运行)。 问题是,当涉及到代码的open()语句时,该工具显然会阻塞进程。 “顶部”没有可见的处理时间,它只是挂起。无论哪个用户(甚至root)执行它,并且已经检查了串行端口的访问权限,都会发生这种情况。它发生在任何(内部或USB)串行端口上。一旦我启动,配置并退出该端口上的minicom或屏幕它将工作。 有没有人知道我在做错了什么或错过了什么? 以下是阻止声明的代码,包括和排除的注释:

int main(void)
{
pid_t pid, sid;
pid = fork();
if (pid < 0) {
    exit(EXIT_FAILURE);
}
if (pid > 0) {
    std::cout << "\n" << pid;
    exit(EXIT_SUCCESS);
}
umask(0);
sid = setsid();
if (sid < 0) {
    /* Log the failure */
    exit(EXIT_FAILURE);
}

if ((chdir("/")) < 0) {
    /* Log the failure */
    exit(EXIT_FAILURE);
}

    close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);


int tty_fd;
struct termios tio;

unsigned char c = 0;

//const char *device = "/dev/ttyUSB0";
const char *device = "/dev/ttyAMA0";

tty_fd = open(device, O_RDONLY | O_NOCTTY);  //<-- Seems to hang here!
if(tty_fd < 0){
    perror("Error opening Serial Port: ");
}
etc....

感谢我能得到的所有帮助。

0 个答案:

没有答案