|
먼저 도스에서는 Thread를 사용할수 없는걸로 알고 있습니다. 윈도우의 Thread계념은 어차피 CPU를 시간으로 분할 하여 사용 하는데.. 이 기능을 OS에서 대신 해주는거죠.. 도스에서는 처음 부터 끝까지 프로그래머가 직접 시 분할을 위한 알고리즘을 만들어야 하지 않을까요?
도스 상에서 while 문에 sleep()함수가 들어 가면 전체 프로그램에 영향을 주게 되는데, 여러번 사용하게 되면 문제가 생길거 같습니다.
직접적인 해결 방법은 도움을 드리지 못하겠네요.. 실력이 모잘라서..
이일형 님이 쓰신 글 :
: 안녕하세요. 시리얼 통신 송신 질문 드립니다.
: 프로그래밍은 제 전공이 아니라 워낙 초짜 입니다. 그래서 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);
: }
:
|