|
이쁜이 님이 쓰신 글 :
: RS232C로 통신을 하려고 하는데 Send와 Receive buffer를 만들어 놓고 Send Data와 Receive Data를 읽어들일 때 Buffer에 대하여 문의 들이려 합니다.
: 제가 지금 쓰는 방법은 Send나 Receive Data를 무조건 한번 읽고 나서 Buffer를 초기화 시키는 방법인데 이것이 좀 문제가 있어 Data가 깨집니다.
: 어디서 듣기로는 한번 쓰거나 읽고 나서 무조건 Buffer를 Clear하는 것이 아니라 os pointer와 Appication pointer를 따로 두어 쓴다는 얘기를 들었는데 어떻게 구현을 해야할지 몰라서요.
: 아님 좀더 좋은 방법이 있음 한수 가르쳐 주십시오.
: 많은 조언 부탁드립니다.
:
통신상에서 send/receive buffer의 경우에는 자료구조 중에서
원형큐(circular queue)를 사용하면 편할겁니다.
원형큐의 어느 정도 충분한 크기의 메모리를 할당받아서(통신 속도와 기타 등등에 따라서
크기는 달라지겠죠)
send와 receive용으로 각각 buffer를 만드세요.
그리고 버퍼의 동작은 receive buffer의 경우에
|-----------------------------------------------------------------------|
^ ^
| |
processing(A) write(B)
이 경우에 rs232c를 통해서 data가 들어오면 B점에 저장을 하고
계속 pointer를 증가시킵니다. 그리고 맨 끝에 오면 다시 맨 처음으로 가면 됩니다.
그리고 프로그램 내부에서 처리를 할 때에는 A점에서부터 프로세싱을 합니다.
여기에서 A를 증가시켜서 B와 같아지면 더이상 처리할 데이터가 없는것이고,
B를 증가시켜 A와 같아지면 buffer가 꽉차서 더 이상 데이터를
받을 수 없다는 것입니다.
참고하세요.
박세용(sharejoy@computer.org)
|