我需要在我的程序中通过串口执行一个简单的交换。我找不到任何与串行端口相关的工作示例或文档。我需要打开一个串口,配置一个端口(设置速度、奇偶校验、停止位等),写入/读取二进制数据,然后关闭。
我尝试使用https://github.com/japaric/serial.rs,但是这个库已经过时了(它甚至不能在 Rust 1.0 上编译)。即便如此,这个库也只提供了如何配置串口的功能,而不是使用它。
根据构建代码的操作系统,有两种解决方案。对于 *nix OS serial.rs 库对于 rust 0.11.0 构建应该可以正常工作,但是对于支持 rust-0.12.0 一个问题已经打开但尚未关闭。
对于 Windows 的东西 (mingw-w64),serial.rs 不是一个简单的解决方案,因为这个库基于 termios 调用,而这些调用不容易为 mingw 设置。原因在于 mingw 是针对 msvcrt 而不是针对 glibc 构建的(有关更多信息,请参见此处)。在 Windows 上,一个简单的解决方案是使用 rust FFI 由 teuniz为rs232 之类的库编写包装器。
使用 mingw gcc 构建库 rs232;
在 Rust 中创建一个包装器;
Windows 的简短示例如下所示:
extern crate libc;
use libc::{c_int,c_uchar,c_uint};
use std::os;
//
#[link(name = "rs232")]
extern {
fn RS232_OpenComport(comport_number:c_int, baudrate:c_int) ->c_int;
fn RS232_SendByte(comport_number:c_int, byte:c_uchar)->c_int;
fn RS232_CloseComport(comport_number:c_int);
}
static COM10:c_int=9;
fn main() {
let y=unsafe{RS232_OpenComport(COM10, 115200)};
unsafe{
RS232_SendByte(COM10,101);
RS232_SendByte(COM10,100);
}
let cl=unsafe{RS232_CloseComport(COM10)};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8369 次 |
| 最近记录: |