2014-08-31 2 views
3

내 프로그램에서 직렬 포트를 통해 간단한 교환을 사용해야합니다. 불행히도 시리얼 포트와 관련된 예제 나 매뉴얼은 찾을 수 없습니다. 난 그냥 열려있는 직렬 포트가 필요 포트를 설정 (속도, 패리티, stopbits 등 설정), 쓰기/이진 데이터를 읽고 닫습니다.녹에서 serialport를 사용하는 방법은 무엇입니까?

나는 https://github.com/japaric/serial.rs을 사용하려고했지만이 라이브러리는 녹슬지 않은 v0.11.0-pre에서 컴파일 되었기 때문에 구식입니다. 어쨌든이 lib는 기능적으로 포트를 설정하는 방법을 제공하지만 포트를 사용하지는 않습니다.

은 ... 간단한 예를 볼 감사하겠습니다 시리얼 포트가 파일 I/O에 사용되는 일반적인 시스템 호출을 통해 액세스 할 수 whcih 문자 장치에 의해 표현된다 UNIX에

+0

표준 라이브러리에 없으므로 FFI를 통해 C 함수를 직접 사용해야하거나 다른 사람이 작성한 라이브러리를 사용해야합니다. 해당 라이브러리에만 문제가 있습니까? 더 이상 컴파일되지 않습니다. 그렇다면 아마도 Rust 버전으로 컴파일하도록 업데이트 할 수 있습니다. (해당 도서관에는 (a 옵션) ['FileDesc']가 들어있는 [public field] (https://github.com/japaric/serial.rs/blob/master/src/serial.rs#L24)가 있습니다. (http://doc.rust-lang.org/master/native/io/file/struct.FileDesc.html).이 페이지는 해당 페이지에서 언급 된 특성을 통해 읽고 쓸 수 있습니다.) – huon

답변

2

. 직렬 포트와 관련하여주의해야 할 추가 사항은 전송 속도 및 기타 매개 변수를 설정하는 데 사용하는 것입니다. ioctl입니다.

4

코드가 작성된 OS에 따라 두 가지 솔루션이 있습니다. * nix OS serial.rs 라이브러리는 녹 0.11.0 빌드에서 제대로 작동하지만 rust-0.12.0을 지원하기 위해 문제가 열렸지만 아직 닫히지 않았습니다.

Windows 용 (mingw-w64)의 경우 serial.rs는 mingw 용으로 쉽게 설정할 수없는 termios 호출을 기반으로하기 때문에 간단한 해결책이 아닙니다. 그것은 mingw가 msvcrt에 대해 glibc에 대해 만들어지지 않았다는 점에서 비롯됩니다 (자세한 내용은 here 참조). Windows에서 간단한 솔루션은 teuniz가 rust FFI를 사용하여 rs232과 같은 라이브러리의 래퍼를 작성하는 것입니다.

  1. mingw gcc를 사용하여 빌드 라이브러리 rs232;

  2. 녹이있는 래퍼를 만듭니다. 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)}; 
} 
관련 문제