임베이디드 리눅스에서 아래의 경우는 어떻게 처리를 해야 되는 지요?? 그간 펌웨어만 다루다가 
이제 막 임베이디드 리눅스를 공부하기 시작했는데 아직 운용 방식이 생소하네요 

(장치1 -이하[1])  / (장치 2-이하[2]) / (장치 3 -이하[3]) 이 485 통신을 이용하여 서로 정보를 주고 받습니다. 

 [1] 은 매 10 msec 마다 [2] 와 [3] 에게  현재 상태 요청 명령을 전송하고 [2] 와 [3]은 해당 명령을 수신하면 
 자기 data를 송신합니다. [1]은 명령 전송후 10 msec 이내에 첫번째 data를 수신 받지 않으면 해당 디바이스
 가 없는 것으로 인식하고 다음 명령을 전송합니다. 즉 [2] 에게 현재 상태를 요청했는데 10 msec 이내 [2]
 에게서 응답이 없으면 [3] 에게 현재 상태를 요청하는 구조입니다. 

    펌웨어로 [2] /[3] 장치 프로그램을 만든다면 10msec 이내 응답 조건을 만족시키기 위해  uart 수신 인터럽트
 서비스 루틴 함수에서 수신 명령을  처리하고 전송 준비를 하면 10 msec 이내 응답조건을 충족 시키는데  아무런 
 문제가 없을것입니다. 
   
   Uart 관련 디바이스 드라이버는 커널에서 제공하는 함수를 그대로 사용 해서  상기 조건을 임베이디드 리눅스로
  구현한다고 하면,  open 함수로 디바이스 드라이버를 열고 read 함수로 data 수신 상태를 확인해서 새로 수신된 data가
   있고 [1] 이 보낸 명령으로 확인되면 write 함수를 이용하여 현재 상태 data 를 송신 합니다. 
   그런데 read 함수의 경우 일종의 폴링 방식 이기 때문에 10 msec 이내 송신 조건을 충족 시키기 위해서는 
   응용 프로그램의 순환 시간이 10 msec 를 초과하지 않도록 만들던지 read 함수를  프로그램 여러 곳에서 호출
   해야 될 것입니다.  이러면 경우에 따라 송신 시간이 초과 될 수 있고 시스템이 불안해 지겠죠 
 
     그래서 이런 생각을 해 봤습니다. read 함수를 매 일정 시간마다 호출 할 수는 없을까 ?

  책을 뒤져 보면 임베이디드 리눅스에서 일정 시간 마다 특정 조건을 체크 하는 방법은 커널 타이머를 추가 해서 인터럽트
  를 받던가  워크 큐 구조체를 이용하여 특정 시간마다 특정 함수를 호출 하면 된다는 것을 알았습니다. 
     그런데 문제가 워크 큐 도 디바이스 드라이버인데 디바이스 드라이버 에서 read 함수를 호출 할 수 있나요?

  임베이드 리눅스를 처음 접할때 가장 답답했던건 응용 프로그램에서는 타이머 인터럽트 서비스 루틴을 만들지 못하고 
 응용 프로그램에서 사용된 변수 또한  디바이스 드라이버에서 그대로 사용할 수 없다는 점 입니다. 
 
  아직 임베이디드 리눅스를 접한지 한달 정도 밖에 않되다 보니 운용 방식에 대해 여러가지 답답한 점이 많습니다. 
  상기 조건일때 리눅스에서는 어떻게 처리 하면 되나요?  조언 부탁 드립니다.  
  emoticon