지금 제가 주기적인 송수신 프로그램을 구현하고 있거든요...
그런데 아주 정확한 주기로 보내야 하기 때문에,
time 함수를 쓸 수 없답니다.
alarm을 이용해서 해봤는데, 제가 잘못 코딩을 해서인지..
잘 안 되더라구요...
혹시 아시는 분 있으면 좀 도와주세요..
20ms 마다 데이타 전송하는 함수나 구현 방법에 대해서
좀 알려주세요..
차라리 10ms마다 틱을 계산하는 타이머를 개조하시는게좋을듯하네요.
혹시 10ms마다 틱을 계산하는 타이머에 대한 정보나 소스 같은거 구할 수 없을까요?..
구하려다가 실패했거든요.. 혹시 아시면 좀 갈켜주실래요?.
/usr/src/ 밑에 리눅스 커널 소스 있습니다. 당연히 timer함수가 존재하죠. 건데 소스 위치가 어떻게 되는지???? 몰겠네.... 혹시 필요하면,www.flyduck.com으로 가보슈.
그거 쓰면 안되나요
2tick마다 신호를 보내야한다고 하니, 어떻게 될른지.... 정확하게 보낼런지... 글세요??? 몰겟네요.
리눅스는 시간에 아주 민감한 os가 아닙니다.
즉, real time성이 보장되지 않습니다.
process간 스케쥴링 타임이 존재하기 때문에 하나의 프로세스에서 정확하게 시간을 맞추면서 일을 하기는 힘듭니다.
timer함수를 쓰더라도 process의 context switching간격에 걸리던가 하면 정확한 시간 동작이 힘들 것 같습니다.
님이 하시는 일의 종류가 어떤 것인지는 잘 모르겠지만 주로 정확한 시간간격을 요구하는 일에 사용되는 장비들은 real time성이 보장되는 RTOS등을 사용하는 경우가 많습니다,
아니면 RTLinux를 쓰면 될런지!!!(제가 이쪽에는 문외한이라...)
저간은 경우는 timer함수를 일정간격으로 돌려야 할 경우는 정확하게 못 돌리게 되므로 테스트 프로그램을 작성해서 평균을 검사한 다음 일정간격보다 더 작게 시간을 주는 방법을 궁여지책으로 사용했습니다.....
뭐, 저같은 경우 유닉스에서의 시간은 그롤려니 하고 짜는 사람이라서 요...
별 도움이 안되는 말만 지껄인것 같군요...
그럼..
만약 Multi Thread 프로그램이 아니면 간단하게 usleep 쓰면 되고요, Multi Thread 인 경우는 sleep() 함수 쓰면 됩니다.
유닉스 같은 multi task 시스템은 정확한(precise) 시간에 맞춘 동작을 요구하는 시스템에 적합하지 않습니다. RTOS 를 사용하시거나, RTOS 를 사용하지 않으셔도 간단한 마이크로프로세서를 선정해서 크리스탈의 주파수와 프로세서의 클럭 계산하셔서 타이머 직접 건드리시면 정확한 주기로 작업을 처리하게 하실 수 있습니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
Re: periodic 전송 방법...
차라리 10ms마다 틱을 계산하는 타이머를 개조하시는게좋을듯하네요.
틱계산하는 타이머 ......
혹시 10ms마다 틱을 계산하는 타이머에 대한
정보나 소스 같은거 구할 수 없을까요?..
구하려다가 실패했거든요..
혹시 아시면 좀 갈켜주실래요?.
Re^3: ㅎㅎ
/usr/src/ 밑에 리눅스 커널 소스 있습니다.
당연히 timer함수가 존재하죠.
건데 소스 위치가 어떻게 되는지???? 몰겠네....
혹시 필요하면,
www.flyduck.com으로 가보슈.
setitimer인가..
그거 쓰면 안되나요
Re^2: 2틱마다 정확하게 메시지를 보내야한다니...
2tick마다 신호를 보내야한다고 하니, 어떻게 될른지....
정확하게 보낼런지... 글세요??? 몰겟네요.
os를 바꿔야 할 듯한 느낌이....
리눅스는 시간에 아주 민감한 os가 아닙니다.
즉, real time성이 보장되지 않습니다.
process간 스케쥴링 타임이 존재하기 때문에 하나의 프로세스에서
정확하게 시간을 맞추면서 일을 하기는 힘듭니다.
timer함수를 쓰더라도 process의 context switching간격에
걸리던가 하면 정확한 시간 동작이 힘들 것 같습니다.
님이 하시는 일의 종류가 어떤 것인지는 잘 모르겠지만 주로
정확한 시간간격을 요구하는 일에 사용되는 장비들은
real time성이 보장되는 RTOS등을 사용하는 경우가 많습니다,
아니면 RTLinux를 쓰면 될런지!!!(제가 이쪽에는 문외한이라...)
저간은 경우는 timer함수를 일정간격으로 돌려야 할 경우는
정확하게 못 돌리게 되므로 테스트 프로그램을 작성해서
평균을 검사한 다음 일정간격보다 더 작게 시간을 주는 방법을
궁여지책으로 사용했습니다.....
뭐, 저같은 경우 유닉스에서의 시간은 그롤려니 하고 짜는 사람이라서
요...
별 도움이 안되는 말만 지껄인것 같군요...
그럼..
Re: periodic 전송 방법...
만약 Multi Thread 프로그램이 아니면 간단하게 usleep 쓰면 되고요,
Multi Thread 인 경우는 sleep() 함수 쓰면 됩니다.
저도 그런 생각이 듭니다.
유닉스 같은 multi task 시스템은
정확한(precise) 시간에 맞춘 동작을 요구하는 시스템에
적합하지 않습니다.
RTOS 를 사용하시거나,
RTOS 를 사용하지 않으셔도
간단한 마이크로프로세서를 선정해서
크리스탈의 주파수와 프로세서의 클럭 계산하셔서 타이머 직접 건드리시면
정확한 주기로 작업을 처리하게 하실 수 있습니다.
댓글 달기