C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[35458] 시리얼통신 질문[송신할때 딜레이]
이일형 [efrazenca] 1960 읽음    2004-06-07 23:16
안녕하세요. 시리얼 통신 송신 질문 드립니다.
프로그래밍은 제 전공이 아니라 워낙 초짜 입니다. 그래서 C 만 사용합니다. -_-
일단 데이터를 받는건 인터럽트를 사용하여 잘 하고 있는데 송신이 문제 입니다.
여러 사이트에서 찾아 봤는데 C 이외의 언어는 (C++도 -_-) 잘 이해를 못하기 때문에 좋은 소스를 찾아도 알 수 없고 대충 예제 프로그램은 제가 올려 놓은 것과 별반 다를게 없습니다.
아래와 같이 프로그램을 짜서 사용하고 있는데요. 일단 송신을 잘 됩니다.

문제는 UART에 여러 문자를 보낼때 while(!(inportb(comport+LSR) & TX_EMPTY)); 루틴이 문제인듯 합니다.
9600bps로 세팅하고 초당 900바이트 정도의 데이터를 송신하는데 CPU 점유율이 높습니다.
다른 작업을 병행하고 통신포트를 6개 이상 사용해야하므로 CPU 점유율을 낮추어야 합니다. 
아마 전에 송신하던 문자가 송신이 되기를 기다리느라 while 문이 많이 반복되는 듯합니다.
제가 생각하기에 delay(), sleep() 함수를 while문 안에 넣으면 될꺼 같은데 그 방법이 맞는지요.
그리고 delay(), sleep()를 써서 잠시 지연을 시킨다면 지연하는 시간이
보레이트와 관계가 있을 듯합니다. 혹시 위의 방법이 맞다면 보레이트별로 지연시간이
어느정도가 적당한지 알고 싶습니다. 보레이트는 9600에서 115200까지 두루 사용하게 될듯 합니다.


void Send_data(unsigned char ch,unsigned int comport)
  {
   while(!(inportb(comport+LSR) & TX_EMPTY));  //TX FIFO가 빌때까지 기다린다
   outportb(comport+THR, ch);
  }

+ -

관련 글 리스트
35458 시리얼통신 질문[송신할때 딜레이] 이일형 1960 2004/06/07
35486     Re:시리얼통신 질문[송신할때 딜레이] posix.duo 2237 2004/06/08
35487         Re:Re:답변 감사드립니다. 이일형 1001 2004/06/08
35475     Re:잘은 모르겠지만..... 몇자만 적어 봅니다. 꿈꾸는빛.영준 1156 2004/06/08
35459     Re:시리얼통신 질문[송신할때 딜레이] 김상면 1642 2004/06/08
35467         Re:Re:시리얼통신 질문[송신할때 딜레이] 이일형 1164 2004/06/08
35473             Re:Re:Re:시리얼통신 질문[송신할때 딜레이] 김상면 1257 2004/06/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.