시리얼 프로그램에서 write문제
글쓴이: demian / 작성시간: 화, 2005/05/17 - 11:54오전
안녕하세요...
시리얼 프로그램에서 write부분에 궁금한 것이 있어 질문드립니다.
write가 안되는것이 아니구 잘 되는데요..
문제는 write할 device가 꺼져있거나 연결을 안해놨을때도
write는 성공한 걸로 나와서 문제가 됩니다.
write의 리턴값이 쓴값만큼 리턴이 되더군요.. device랑은
연결조차 안했는데...
device가 연결이 안되어 있으면 write에서 실패하게 하려면
어떻게 해야 하는지 알려주시면 감사하겠습니다.
Forums:
시리얼의 경우 다양한 형태로 외부 디바이스와 연결이 되는데 각종 연결 선
시리얼의 경우 다양한 형태로 외부 디바이스와 연결이 되는데 각종 연결 선이나 상대편의 수신 상태 등을 알 수 있는 신호까지 연결이 되어 있다면, 시리얼 제어 함수를 호출해서 상태를 보고 데이터를 보낼 수 있을 것입니다만, 보통은 GND, Tx, Rx 정도만 꼬아서 연결하기 때문에 기기가 연결되어 있는지를 바로 알 수 있는 방법은 없습니다.
결국 그것은 TCP 가 하는 역할과 비슷한 패킷의 에러 유무, ACK, 시간만료 등을 적용하는 상위 전송 라이브러리나 어플리케이션에서 처리해주셔야 합니다.
디바이스가 응답을 하지 않는 한시리얼(rs232)만으로는 근본적으로는
디바이스가 응답을 하지 않는 한
시리얼(rs232)만으로는 근본적으로는 알 수 없습니다.
그래서 보통은
디바이스가 응답을 하는 경우는
디바이스의 존재 유무를 확인하는 절차를 반드시 거치죠.
가장 간단한 명령,
이를테면 INFO, *IDN?, STAT과 같이
디바이스의 정보를 질의하는 명령을
사용해서 통신가능여부를 확인합니다.
(디바이스에 따라 달라지겠지만요)
만약 디바이스가 응답을 하지 않는다면,
시리얼만으로는 방법이 없다고 보시면 됩니다.
There is no spoon. Neo from the Matrix 1999.
사용하시는 시스템 환경은 정확히 모르겠으나...아마 기본적으로 시리얼
사용하시는 시스템 환경은 정확히 모르겠으나...
아마 기본적으로 시리얼 Write를 하면, TX buffer에 저장이 됩니다.
그리고 Serial Driver상에서 TX Interrrupt 발생에 따라서 TX Buffer에서
데이타를 하나씩 보내주는 방식으로 동작합니다.
따라서 사용자는 TX Buffer에 정확히 들어간것만 확인이 가능하죠..
이것을 해결하려면...
(다른 방법이 있는줄은 모르겠지만.)
Serial Driver를 수정하면 됩니다.
Serial Driver에서 TX Buffer의 내용을 모두 보내기 전에는 Return을 하지 않도록 하면 되죠...(그러나...다른 문제점들이 발생가능합니다...효율성도 떨어지구요.)
==============================
= Crazy Fighter : Kill Them All =
==============================
댓글 달기