Я разработчик программного обеспечения, в настоящее время входящий в мир программирования для физических устройств через последовательный интерфейс, и некоторые аспекты мне незнакомы или неизвестны.
Одним из таких аспектов является выяснение поведения соединений с последовательным устройством.во время одновременного чтения и записи.
Позвольте мне объяснить: например, у меня есть последовательное устройство, установленное на /dev/ttyACM0
, и я должен разработать подпрограмму, которая реагирует на выходные данные этого устройства, запускаемые различными внешними устройствами.источники.Это означает, что у меня есть программа, которая открывает соединение, которое постоянно и асинхронно читает выходные данные.
Пример на golang:
func main() {
go listenForUpdates() //create an asynchronous routine
//something else that keeps the program running
}
func listenForUpdates() {
for {
//blocks until device sends some output
responseAsBytes, err := serialController.Readline("/dev/ttyACM0")
if err != nil {
panic(err)
}
response := string(responseAsBytes)
//do something with response
}
}
Кроме того, у меня есть другие подпрограммы, которые открывают новое соединение сзапишите на устройство и также ожидайте некоторый вывод, специфичный для того, что было написано.
func execute() {
err := serialController.Write("/dev/ttyACM0", "MY_COMMAND")
if err != nil {
panic(err)
}
//expects a certain output to be sent
responseAsBytes, err := serialController.Readline("/dev/ttyACM0")
if err != nil {
panic(err)
}
response := string(responseAsBytes)
//do something with response
}
Поэтому мой вопрос : какая операция Readline
читает вывод, инициированный операцией Write
?Это одна из асинхронных подпрограмм (даже если это отдельное соединение) или она вызывается непосредственно после операции записи?
Представьте, что устройство получает большой трафик, и мне нужна гарантия, чтовывод, который я читаю после операции записи, не связан с самой операцией или с тем, что я выполняю много операций записи, и выходные данные не перепутаны.
Любой уточняющий ответ или документация, помогающая мне понять этос благодарностью.
(я писал здесь, так как это больше связано с последовательными устройствами, чем с программированием)