logo
한국어 Select Language
FF 포럼
포럼지기에게 한 마디
공지사항
뉴스 EZ보드 통합 메뉴얼
FA-VUS 개발환경 !강추! 타켓보드 부팅-HyperTerminal 타켓보드 부팅-Tutty 타켓보드 부팅-minicom Windows환경-타겟 Linux 구동 Linux환경-타겟 Linux 구동 개발 시스템 구축 유형 페도라 설치 CentOS 설치 크로스 컴파일러 설치 TFTP 환경 구축 NFS 파일 시스템 구축 삼바 서버 구축 부트로더 부트로더 쓰기 커널 이미지 제작 및 설치 램디스크 이미지 제작 및 설치
임베디드 제품 사용기 오늘의 영어 휴게실 Appliance
강좌 & 팁
강좌 & 팁 EZ-보드 그래픽 & 멀티미디어 네트워크 프로그래밍 디바이스 드라이버 ImJa 솔루션 임베디드 FLEX 안드로이드 iOS 개발 FAIDE 하드웨어 C/C++ go언어 GNU C 레퍼런스 메뉴얼 ARM 루아 응용 프로젝트 이클립스 지그비 개발자 노트 권장도서 FPGA
VIVADO DSP HSIO Logic Zynq
함수설명
C 라이브러리 함수 커널 API 그래픽 라이브러리 - gxLib
자료실
자료실 FALINUX SDK ARM PC-V210 S3C6410
G100-S3C6410 S100-S3C6410 C221-S3C6410 N200-S3C6410 EZ-S3C6410
S5PV210
G100-S5PV210 S100-S5PV210 N200-S5PV210 C221-S5PV210
EZ-S3C2440 EZ-PXA270 EZ-X5 EZ-S2410 Auto Package
도와주세요
FAQ 도와주세요

  • 회원가입
  • ID/PW 찾기
 
  1. FAQ

  2. 도와주세요


최근 글

  • [특판][성Y인Y용Y품][...
  • 요즘 잘 나가는,,,
  • 요즘은 vmware 말고 ...
  • [docker] buildx 를 ...
  • buildroot 사용 관련
  • GPIO 제어 방법 문의 [1]
  • 임베디드 리눅스 개발...
  • make wandboard_quad ...
  • LCD 초기화 코드 좀 ... [1]
  • 임베디드 리눅스 커널...

최근 댓글

  • 오래 전에 해결법을 터득해서 ...
  • 비트 코인으로 작업하는 것은 ...
  • 10년차 임베 엔지니어 입니다. ...
  • 임베디드쪽이라면 SOC 쪽 displ...
  • 그렇군요 제가 질문이 잘못됬었...
  • 취준생으로서 포트폴리오를 만...
  • 제가 현재 취업준비생입니다. ...
  • 에프에이리눅스 보드는 아래 링...
  • 전체
  • 일반
  • X5
  • S2410
  • ESP-NS
  • S3C2440
  • EP9312
  • 구매
  • 기타

기타 read 함수를 일정 시간 간격으로 호출 하는 방법 ??

2008.12.29 22:52

사람세상 조회 수:17376

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

(장치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
  

이 게시물을
  • Twitter
  • Facebook
  • Delicious
수정 삭제 목록

댓글 3

  • 한번만

    2008.12.30 16:55

    응용프로그램에서 타이머를 등록하고 핸들러 함수를 생성이 가능합니다.
    시스템에 따라서 타이머 최소주기가 10msec일 수는 있습니다만....
    그리고 응용프로그램의 변수값등도  ioctl을 통해서 드라이버에 전달가능하고요.

    댓글 수정 삭제

  • 사람세상

    2008.12.30 17:15


     응용프로그램에서 커널 타이머를 추가 할 수 있다구요??? 혹시 add_timer()  함수로 등록 하는 방법을 말씀하시는 건가요?
     유영창님의 디바이스 드라이버라는 책을 보면 응용 프로그램에선 커널타이머나 인터럽트 핸들러 선언이 않된다고 나와
     있는거 같은데 아닌가요? 아니면 책 내용 자체가 디바이스 드라이버에 관한 내용을 다루다 보니 예제도 그쪽 위주로 설명
     되어 있는지 모르겠네요...  일단 어차피 맨땅에 헤딩 하는 기분으로 접근 하고 있기 땜시 그냥 무작정 해보면 되겠네요  

       디바이스 드라이버 책을 보면 이런 내용이 있습니다. 
     " 응용 프로그램은 인터럽트를 받아 들일수 없다 궁여 지책으로 사용하는 것이라면 SIGIO 라는 특별한 시그널이다.  물론 
     이역시 정상적인 인터럽트와는 거리가 멀다 "

       위 내용만 보면  응용 프로그램에서 타이머나 인터럽트 핸들러 함수를 생성 하지 못할거 같은데 ????? ^^  
      


      

    댓글 수정 삭제

  • 오재경

    2009.01.08 05:23

    응용프로그램에서 주기적으로 어떤일을 처리하는 것은 어려움이 따릅니다.
    while 문을 돌련서 시간을 비교하는 방법이 있습니다. 무자정 돌리는 것은 아니며
    poll()함수를 사용하여 프로세스를 재우면서 감시하여야 합니다. 10msec 이상의 시간주기를
    지원합니다.
    10msec이하의 시간을 감시하면서 어떤일을 하고자 한다면 디바이스 드라이버에서
    하드웨어 타이머 인터럽트를 사용하셔야 합니다.  커널이 지원하는 add_timer() 함수로는
    10msec 이하는 지원하지 못합니다. arm 커널의 경우 HZ 값이 100 이므로 지원하지 못하는 것입니다.
    만일 i386 이라면 1msec 입니다.

    댓글

목록
번호 제목 글쓴이 날짜 조회 수
공지 포럼의 메뉴가 보이지 않아요! 장길석 2014.02.06 957671
공지 [중요 공지]제품 사용 및 기술 문의는 전화 상담을 받지 않습니다. 장길석 2012.11.09 1408554
공지 답글에 대한 공지 사항. falinux 2006.11.20 2424052
15341 [특판][성Y인Y용Y품][비아][시알][여성흥분제] 전부 1+1 vv8282.top 지금 확인해보세요~! dde33 2026.10.15 2
15340 요즘 잘 나가는,,, dde33 2026.09.12 845
15339 buildroot 사용 관련 로즈마리 2021.02.01 38167
15338 GPIO 제어 방법 문의 [1] 단순최고 2021.01.25 51084
15337 임베디드 리눅스 개발 보드 추천 nam 2019.12.06 48864
15336 make wandboard_quad 실행시 문제 gasi 2019.08.27 47085
15335 LCD 초기화 코드 좀 봐주세요 [1] 김용수 2019.07.12 63137
15334 임베디드 리눅스 커널 소스에 관해 질문드립니다 ! ekthatkxkd 2019.06.28 43729
15333 numpy,scipy 를 arm-linux-XXXX 로 크로스컴파일 하여 올릴수 있나요? 초보자 2019.06.24 49288
15332 I2C - deal with arbitration loss 오류가 궁금합니다. [1] S1eepingBeauty 2018.12.10 56771
15331 구형 EM-PXA270 보드 혹시 보유하시분 연락 주시면 감사드릴께요. file 존 2018.11.24 42753
15330 리눅스 GPIO 관련 센서의 단선 또는 고장유무 판별법이 궁금합니다. [2] S1eepingBeauty 2018.11.12 55127
15329 임베디드 리눅스에서 c 언어 디버깅 궁금합니다. [1] 존 2018.09.14 47073
15328 부팅 시간 문의 [1] nam 2018.06.29 45795
15327 localport? port? 검은고래 2018.06.29 39961
15326 fork()의 thread 멈추는 현상 [4] HwangRoy 2018.05.09 58616
15325 임베디드 리눅스 습득용 보드 판매하시나요? 임베디드초급자 2018.04.27 39719
15324 (도와주세요)네트워크 디바이스 드라이버 수정문제입니다. [1] Chanmini 2018.03.04 43602
15323 Ez x5 구합니다!! khobaik 2018.01.26 38317
15322 실행중 symbol not found 를 발생시키는 u-boot 본적 있으신가요 ? sayyouandme 2017.12.17 57350
첫 페이지 1 2 3 4 5 6 7 8 9 10 끝 페이지
쓰기
태그
부탁드립니다. ^^
  • 글을 작성하시려면 회원으로 가입하시고 로그인 하셔야 합니다.
  • 회원 가입은 주민등록번호가 필요 없으며, 메일 주소만 있으면 간단하게 가입하실 수 있습니다.
  • 본 포럼에 등록된 모든 글의 저작권은 작성하신 분께 있으며, 저작자의 허락 없이 다른 곳에 펌이나 도용하시면 안 됩니다.
  • 또한, 전자우편 수집 프로그램이나 그 밖의 기술적 장치를 이용하여 무단으로 이메일 주소 및 자료 수집되는 것을 거부하며,
  • 이를 위반 시 정보통신망 법에 의해 형사 처벌됨을 유념하시기 바랍니다.
  • FF 포럼
  • 강좌 & 팁
  • 함수설명
  • 자료실
  • 도와주세요