2

デーモンとして実行され、Debian(この場合はRaspberryPiで実行されているRaspbian)のシリアルポートからデータを継続的に読み取る単純なC++ツールがあります。問題は、コードのopen()ステートメントに関して、ツールが明らかにプロセスをブロックすることです。'top'に表示される処理時間はなく、ハングするだけです。これは、どのユーザー(rootでも)が実行し、シリアルポートのアクセス権もチェックされているかどうかに関係なく発生します。これは、任意の(内部またはUSB)シリアルポートで発生します。一度起動したらすぐに、ミニコムを構成して終了するか、そのポートで画面を表示します。誰かが私がここで間違っていることや行方不明になっていることを知っていますか?ブロッキングステートメントまでのコードは次のとおりです。インクルードとコメントは除外されます。

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....

私が得ることができるすべての助けをありがとう。

4

0 に答える 0