专用连接/文本输出,用于与串行设备通信

时间:2019-02-21 09:41:59

标签: go

我是一名软件开发人员,目前正在通过串行接口进入物理设备编程领域,对我来说有些方面是陌生的或未知的。

其中一个方面是弄清楚在并行读写期间串行设备的连接行为。

让我解释一下:例如,我在/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操作之后直接调用的那个?

想象一下,设备正在接收大量流量,我需要某种保证,即在执行写操作后读取的输出与该操作本身无关,或者我正在执行许多写操作并且输出不会混淆上。

任何澄清答案或文档以帮助我弄清楚这一点,我们将不胜感激。

(我在这里发布,因为它与串行设备的关系比编程的更多)

0 个答案:

没有答案