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 957631
공지 [중요 공지]제품 사용 및 기술 문의는 전화 상담을 받지 않습니다. 장길석 2012.11.09 1408527
공지 답글에 대한 공지 사항. falinux 2006.11.20 2424020
736 localport? port? 검은고래 2018.06.29 39957
735 (도와주세요)네트워크 디바이스 드라이버 수정문제입니다. [1] Chanmini 2018.03.04 43600
734 외부명령어 실행3에서 띄운 브라우저를 종료하려면 어떻게 해야 하나요? jung 2017.03.30 30412
733 linux input event driver에 관해 개념 질문드려요 [1] 초보자A 2017.02.17 24096
732 윈도우 임베디드 vs 리눅스 임베디드 [1] 8월마지막주 2016.09.06 21823
731 s3c6410 이더넷 포팅을하는데 eth0를 등록하면 출력문들이 무한으로 뜹니다.. [1] 랩순이 2016.03.13 18496
730 RS485통신 도움좀 부탁드립니다 [1] 이응 2015.09.17 19350
729 라즈베리파이2의 라즈비안에서 gxlib 를 사용할 수 있을까요 ? woojinauto 2015.07.28 18093
728 취업을 앞둔 대학생입니다 도와주세요~. [2] jsh25 2015.04.05 18696
727 make: mipsel-linux-gcc: Command not found 이거 어떻게 해결해야 하나요? jungmonster 2015.01.25 22526
726 achro210T를 이용해 사운드 출력을 하려고 합니다. hye 2014.12.07 19890
725 S5PV210 보드에서 코덱 정상동작 문의 드립니다. munworld 2014.11.27 18452
724 S100-S5PV210 EZBOOT bootloader 문제.. [1] file 모해찡 2014.11.10 18984
723 수고 많으십니다. 저는 ajaxplorer5를 설치해서 사용중입니다. 부산너구리 2014.06.21 19698
722 통합형 디바이스 드라이버 질문있습니다. [1] 담쟁이 2014.04.25 34207
721 SIB-S100-V3.1R1 보드 커널이미지 관련문의사항(UART0) lee 2014.03.23 18598
720 인체감지 또는 동작감지 센서와 원리가 궁금합니다 [1] 음악은나의삶 2014.03.16 45360
719 포럼의 메뉴가 보이지 않아요! file 장길석 2014.02.06 957631
718 ez-boot3.0 에 이더넷 드라이브 변경. [5] 쿠우푸우 2014.01.21 22022
717 [EM-S3C6410] route table에서 gateway 가 사라집니다. [2] 루디 2014.01.14 27586
첫 페이지 1 2 3 4 5 6 7 8 9 10 끝 페이지
쓰기
태그
부탁드립니다. ^^
  • 글을 작성하시려면 회원으로 가입하시고 로그인 하셔야 합니다.
  • 회원 가입은 주민등록번호가 필요 없으며, 메일 주소만 있으면 간단하게 가입하실 수 있습니다.
  • 본 포럼에 등록된 모든 글의 저작권은 작성하신 분께 있으며, 저작자의 허락 없이 다른 곳에 펌이나 도용하시면 안 됩니다.
  • 또한, 전자우편 수집 프로그램이나 그 밖의 기술적 장치를 이용하여 무단으로 이메일 주소 및 자료 수집되는 것을 거부하며,
  • 이를 위반 시 정보통신망 법에 의해 형사 처벌됨을 유념하시기 바랍니다.
  • FF 포럼
  • 강좌 & 팁
  • 함수설명
  • 자료실
  • 도와주세요