임베디드 리눅스에서 sleep함수를 쓰는데요
글쓴이: 콩수니 / 작성시간: 화, 2012/07/31 - 5:17오후
임베디드 리눅스에서 반복문안에서 sleep 함수를 사용해서 구현을햇는데
작동하다가 프로그램이 반응이 없습니다..
while(1){
work()//내가 지정한 작업 수행
sleep(30); //30초 대기
}
뭐 단순히 로직은 이렇게 보시면 되겠습니다.
당연히 30초 쉬고 작업하고 30초 쉬고 작업해야 되는것같은데...
처음 얼마동안은 잘 작동하다가 시간이 지나면 정말로 잠들어버리더군요...
잠들어버리는 시간도 몇번 해보니 랜덤하게 일어납니다.
그래서 sleep() 함수없이 반복문으로 작업햇더니 무한히 작업을 잘하더라고요
그리고 추가로 sleep 함수의 정확도가 궁굼합니다.!!
티값으로 계산해서 완벽히 정확하다는데 혹여 제시간에 계산을하더라도 스케줄러에서 뒤로 밀려서 약간의 오차가 발생 할 경우는 없는가요?
궁굼하네요!!
조언부탁드립니다.
Forums:
일단 왜 멈추는지는 전혀 모르겠군요. (이것만
일단 왜 멈추는지는 전혀 모르겠군요. (이것만 가지고는)
sleep accuracy는 시스템 아키텍쳐마다 다를것 같은데요.
일단 리눅스에서는 time granularity 가 10ms기준으로 알고있기에 이정도 오차는 있으리라 보구요.
나머지는 뭐 interrupt interval에 따르겠지요.
인용: 티값으로 계산해서 완벽히 정확하다는데 이
인용:
티값으로 계산해서 완벽히 정확하다는데
이 말씀 출처가 어디인가요?
sleep() 은 애초에 정해진 시간 이상 대기하는걸 보장하는거지
정확히 그 시간 후에 깨어나는걸 보장하지는 않습니다.
정해진 시간 후에 많고많은 스케줄링 대상 중 하나가 될 뿐입니다.
댓글 달기