【发布时间】:2019-08-14 05:30:25
【问题描述】:
我正在使用 raspberry pi 和 arduino 开发一个项目。我正在树莓派上编写一个 GO 程序,以每秒 115200 波特率从 Arduino 接收 UART 数据。树莓派读取 UART 数据,将其保存到文件(基于 file1 或 file2 等的值),然后将文件发送到 ftp 服务器。
由于上传到服务器可能需要一些时间,具体取决于网络,我想使用 go 并发,以便 UART 读取和保存到文件不会中断。以下是我尝试应用的伪代码(骨架)。我在代码中的想法是文件路径将按顺序缓冲在通道中,并且上传以相同的顺序执行。我做得对吗?有没有更好的方法来解决这个问题?
package main
import "strings"
func SendFile(filePath string) {
}
// based on the value of the data, SaveToFile saves the data to either file1, file2 or file3
func SaveToFile(uartData []string) filePath string {
return filePath
}
func main() {
ch := make(chan string, 1000)
//uartInit initialization goes here
uart := uartInit()
//infinite loop for reading UART...
for {
buf := 1024 // UART buffer
data := uart.Read(buf)
uartData = strings.Split(string(buf), " ")
//channel receives filepath
ch <- SaveToFile(uartData)
//channel sends filepath
go SendFile(<-ch)
}
}
【问题讨论】:
-
好吧,我不认为这就是你使用频道的方式......你可以试试这个play.golang.org/p/6jDrSPaPrUQ
-
@SivaGuru 您的方法似乎是合理的。我会尽快发布我的解决方案。
标签: go concurrency channels