Не удается открыть UART. Убедитесь, что он не используется другим приложением

Кажется, есть странная проблема, с которой я столкнулся при работе с UART на Raspberry Pi. Проблема проста, я инициализирую UART, как показано здесь и установите скорость 9600 бод, и даже передача первых нескольких байтов идет хорошо. Однако через некоторое время, когда я постоянно продолжаю отправлять данные, RPi показывает это сообщение на экране: «Невозможно открыть UART». Убедитесь, что он не используется другим приложением.

Я не знаю, где я ошибаюсь и усложняю ситуацию, я столкнулся с этой проблемой пару дней назад, до этого код работал нормально без ошибок в течение длительного периода времени.

Вот фрагмент кода:

    minMaxLoc( diffImg, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );
    xpos=maxLoc.x;
    ypos=maxLoc.y;

    xposs = xpos - xposp;
    yposs = ypos - yposp;
    xposp = xpos;
    yposp = ypos;
    char x_tx_buffer[20], y_tx_buffer[20];
    char x_dummy_buffer[20];
    char y_dummy_buffer[20];
    char *p_x_tx_buffer, *p_y_tx_buffer;

    sprintf(x_dummy_buffer,"%d", (int)(abs(xposs*2.5)));
    sprintf(y_dummy_buffer,"%d", (int)(abs(yposs*2.5)));

    p_x_tx_buffer = &x_tx_buffer[0];
    *p_x_tx_buffer++ = x_dummy_buffer[0];
    *p_x_tx_buffer++ = x_dummy_buffer[1];
    *p_x_tx_buffer++ = x_dummy_buffer[2];
    *p_x_tx_buffer++ = x_dummy_buffer[3];

    p_y_tx_buffer = &y_tx_buffer[0];
    *p_y_tx_buffer++ = y_dummy_buffer[0];
    *p_y_tx_buffer++ = y_dummy_buffer[1];
    *p_y_tx_buffer++ = y_dummy_buffer[2];
    *p_y_tx_buffer++ = y_dummy_buffer[3];

    uart0_filestream = open("/dev/ttyAMA0", O_RDWR | O_NOCTTY | O_NDELAY);      //Open in non blocking read/write mode
    if (uart0_filestream == -1)
    {
        //ERROR - CAN'T OPEN SERIAL PORT
        printf("Error - Unable to open UART.  Ensure it is not in use by another application\n");
    }
    if (uart0_filestream != -1)
    {
        int countx = write(uart0_filestream, &x_tx_buffer[0], (p_x_tx_buffer - &x_tx_buffer[0]));       //Filestream, bytes to write, number of bytes to write
        int county = write(uart0_filestream, &y_tx_buffer[0], (p_y_tx_buffer - &y_tx_buffer[0]));       //Filestream, bytes to write, number of bytes to write
        if (countx < 0 || county < 0)
        {
            printf("UART TX error\n");
        }
    }

Где я ошибаюсь?


person Dead-coder    schedule 06.08.2013    source источник
comment
Вы звоните по этому поводу снова и снова? Вы не забыли закрыть его, прежде чем снова открыть?   -  person Jiminion    schedule 06.08.2013


Ответы (1)


Это нужно сделать в конце процедуры.

close(uart0_filestream);
person Jiminion    schedule 06.08.2013
comment
Да, я звонил ему снова и снова. Я не закрывал его, но раньше с проблемой не сталкивался. Это помогло. Спасибо. - person Dead-coder; 06.08.2013
comment
Прохладно! Рад слышать, что это помогло. - person Jiminion; 06.08.2013