Тест обратной связи UART для vxworks

#uart #multitasking #vxworks

#uart #многозадачность #vxworks

Вопрос:

Я пытаюсь написать тест обратной связи UART в командной строке. Сначала я использовал ‘devs‘, чтобы найти последовательный порт: / tyCo /0. Затем я открыл последовательный порт для чтения / записи: fd=open(«/ tyCo/0»,2).

Поскольку read() выглядит как блокирующий вызов, я попытался создать задачу для выполнения чтения: sp(read, fd, amp; W, 0x10), где W=malloc(0x10).

Я пытался написать в fd: write (fd, «ПРИВЕТ», 5) но когда я отображаю содержимое в amp; W, я получаю мусор.

Когда я перечисляю запущенные задачи, я вижу задачу, которую я создал для чтения, которая находится в «ОЖИДАНИИ» и имеет приоритет 100. Я использовал taskPrioritySet(), чтобы назначить ему разные приоритеты, но безрезультатно.

Я надеялся, что созданная мной задача, которую я хотел бы немедленно заблокировать при вызове функции read(), проснется при выполнении функции write().

Есть идеи о том, как я мог бы выполнить тест обратного цикла UART командной строки?

Ответ №1:

вызов чтения блокируется, как вы предлагаете, но блокируется только в том случае, если нечего читать. Таким образом, вам не нужно создавать для этого задачу, ее можно просто вызвать из командной строки (и если она блокируется из-за отсутствия ввода, вы можете прервать вызов и перезапустить задачу командной строки, отправив CTRL-C через терминал)

Другой момент заключается в том, что W — это указатель, который указывает на выделенную память. Нет необходимости принимать его адрес (и я не уверен, обрабатывает ли оболочка VxWorks адресную ссылку на свои переменные)

В качестве отказа от ответственности, в настоящее время у меня нет системы для тестирования этих шагов ниже. Но, выполнив именно то, что вы пытаетесь сделать, вот как это должно выглядеть.

Подводя итог, это должно быть MWE:

 fd=open("/tyCo/0",2)
W=malloc(0x10)
write(fd,"HELLO",5)
read(fd, W, 0x10)
d W
  

В качестве дополнительного примечания, tyCo / 0 часто является последовательным портом, который используется для связи с оболочкой VxWorks. Поэтому убедитесь, что вы действительно используете правильное имя порта.

Чтобы проверить операции с fileDescriptors, вы можете отключить последовательный порт и открыть файл в качестве теста. По крайней мере, вы будете уверены, что можете читать и записывать в FileDescriptor, как ожидалось.

 fd=open("testFile",2)
W=malloc(0x10)
write(fd,"HELLO",5)
read(fd, W, 0x10)
d W