我是一名嵌入式程序员,试图为通信应用程序做一些编码,并需要一个快速入门指南,以最好/最简单的方式做某事。
我正在成功发送串行数据包,但需要采用某种形式的发送/响应协议,以避免目标系统溢出并确保收到数据包。
现在 - 我点击一下按钮就可以获得所有传输代码,并且无需任何控制即可发送整个代码。 构造这段代码的最佳方法是什么,即发送一些数据包 - 等待响应...发送更多......等等,直到完成所有操作,然后继续执行主程序。 我以前没有在这个环境中使用线程或回调等,但是会学习 - 我只需要一个指向最直接的方法的指针。
由于 罗布
答案 0 :(得分:1)
.NET serialport使用缓冲区,学会使用它们。
发送(远小于)发送缓冲区的数据包无需线程即可完成。
接收可以通过DataReceived事件完成,但要注意从另一个线程调用。您也可以从那里开始自己的线程并使用阻塞读取。
最佳方法取决于您的“数据包”和协议的外观。
答案 1 :(得分:1)
我认为对于基于MCU和PC的串行通信有很长的经验
我强烈反对UNSUGGEST基于单线程的解决方案,虽然它对于光速测试非常困难,但绝对是最终版本。
当然,您可以选择多种模式,但它们主要围绕通信过程的专用线程和有限状态机来解析协议(在接收期间)。
prevoius答案让您了解如何构建一个简单的程序,但它可能取决于协议规范,目标设备,应用程序的范围等。
答案 2 :(得分:0)
当然有不同的方式。
我将基于线程描述基于异步操作的方式:
答案 3 :(得分:0)
您还可以在串口上实现低级握手;将串口的Handshake属性设置为rts / cts或xon / xoff。
否则(或另外),使用后台工作线程。对于简单的线程,我喜欢用于管理线程的Monitor.Wait / Pulse机制。
我有一些代码在线程中执行只读串行通信;给我发电子邮件,我很乐意发给你。
答案 4 :(得分:0)
我不确定你的问题是否正在设计通信链接的PC和嵌入式方面,如果你是,你可能会发现this SO question有趣。