기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
현재 CPU에 여러 GPIO들이 있고, 2개의 드라이버에서 2개 또는 3개 정도의 GPIO를 Interrupt로 받아야합니다.
그리고 Interrupt가 들어오면, Application에 알려줄 수 있도록 event 처리해야하는데, 어떻게 해야하는지 알려주세요.
현재는 한개의 Driver에서 하나의 GPIO를 Interrupt로 처리하며, 방법은 다음과 같습니다.
①Driver에서 Application으로 kill_fasync(&sigo_async_alram, SIGIO, POLL_IN); 로 전달합니다.
②Application에서는
- read_event_sigact.sa_handler = Handler_gpio_driver;
- sigaction( SIGIO, &read_event_sigact, &old_event_sigact );
을 이용하여
③Handler_gpio_driver()에서 Driver로부터 온 event를 처리합니다.
그리고 다른 GPIO들은 while() 루프속에서 polling mode로 GPIO를 관찰하고 있습니다.
while()루프에서 GPIO를 polling mode로 관찰하면, 신호를 잃어버리는 경우가 자주 발생합니다.
그래서 polling mode를 interrupt mode로 변경하고 여러개의 ISR에서 Application으로 event를 보내, Application에서 각 event마다 처리를 하려고합니다.
그런데 여러개의 event를 Application에 전달하는 방법과 Application에서 분리하는 방법을 몰라 문의드립니다.
어떤 방법을 사용하면 될까요?
(Windows는 event name만 같다면 잘 되는데.. ㅠㅠ)
시그널은 이벤트가 발생했다 정도만 사용되며, 무슨 이벤트인지는 어플리케이션에서 디바이스 드라이버에 read 나 ioctl 등으로 알아오는 수 밖에 없습니다. procfs 를 이용하시면 편리합니다.