Установка скорости передачи последовательного порта не выполняется в vxworks - PullRequest
1 голос
/ 29 июня 2011

Я пишу задачу vxworks, связанную с отправкой данных через последовательный порт.Открытие последовательного порта прошло успешно.Но когда я пытаюсь установить скорость передачи данных с помощью системного вызова ioctl (), происходит сбой.Я даю код ниже.Кто-нибудь может пролить свет на это?Вторая функция всегда дает сбой ...

int f, status;

if (f = open("/tyCo/1", O_RDWR, 0) == ERROR)
{
    printf("error opening serial port; exiting...");
    return 1;
}

if (status = ioctl(f, FIOBAUDRATE, 2400) == ERROR)
{
    printf("ioctl error; exiting...");
    return 1;
}

1 Ответ

5 голосов
/ 02 июля 2012

Может быть, немного слишком поздно, но код выше выглядит как ошибочный. Оператор присваивания имеет более низкий приоритет, чем оператор сравнения, поэтому вы должны написать такой код:

if((f = open("/tyCo/1", O_RDWR, 0)) == ERROR)
{
    printf("error opening serial port; exiting...");
    return 1;
}

if((status = ioctl(f, FIOBAUDRATE, 2400)) == ERROR)
{
    printf("ioctl error; exiting...");
    return 1;
}

Таким образом, он отлично работает в VxWorks. То, как вы написали код, состояло в том, чтобы назначить f либо 0, либо 1 (в данном случае 0, потому что вы могли бы открыть последовательный порт), а затем попытаться установить скорость передачи для дескриптора файла 0 (я думаю, это идентификатор stdout). То же самое вы присвоили статус 0 или 1 (1 в данном случае, потому что вы не могли установить скорость передачи данных, поэтому ioctl вернул -1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...