我是一名软件开发人员,目前正在通过串行接口进入物理设备编程领域,对我来说有些方面是陌生的或未知的。
其中一个方面是弄清楚在并行读写期间串行设备的连接行为。
让我解释一下:例如,我在/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
操作触发的输出?是异步例程中的那个(即使它是一个单独的连接),还是在Write操作之后直接调用的那个?
想象一下,设备正在接收大量流量,我需要某种保证,即在执行写操作后读取的输出与该操作本身无关,或者我正在执行许多写操作并且输出不会混淆上。
任何澄清答案或文档以帮助我弄清楚这一点,我们将不胜感激。
(我在这里发布,因为它与串行设备的关系比编程的更多)