저는 장비제어를 하는데.. 모션 콘트롤러와 i/o보드를 사용합니다. 그런데 일반 어플에서는 10ms 정도에서 제어함수를 돌립니다. 그래서 좀더 빠르게 하드웨어 정보를 얻고 제어를 할 수 있었으면 해서 드라이버를 공부하고 있습니다. 그런데. 드라이버를 공부하고 작성중에 드라이버에서 쓰레드나 인터럽트를 만들어 응용프로그램의 제어 함수를 실행시킬수 있는 방법이 없을까 고민하게 되었습니다. 어떠한 방법이 없을까요. 공부한지 얼마 안되어서 전체적인 흐름이나 구조가 파악이 안되어서 되는지 안되는지. 알 수가 없습니다. 가능한 방법이 있다면 좋겠습니다. 장문을 읽어 주셔서 감사합니다.
댓글 3
-
이재민
2004.08.24 16:57
답변 정말 고맙습니다.
죄송하지만 한가지 더 질문할께요.
Dll로 작성된 함수는 드라이버에서 사용가능한지요. -
안녕하세요, 반갑습니다.^^
보통, 드라이버에서 어플리케이션을 실행시키지는 않습니다.(그러한 방법도 아마 없는 것으로 알고 있습니다.)
시스템이 시작되면서 드라이버가 운영체제에 의해 로드되도록 하거나, 어플리케이션이 필요에 의해 드라이버를 로드하는 방법이 표준입니다.
어플리케이션은 특정한 조건이 되었을때 드라이버로부터 어떤 이벤트나, 값을 얻을수 있습니다.
그렇게 하기 위함으로 보통 Pending과 같은 방법이나 이벤트 객체를 주로 사용합니다.
즉, 어플리케이션은 드라이버에게 어떤 값을 받을 준비를 하고 드라이버에게 뭔가를 요구하면, 드라이버가 값을 줄수 있는 시기가 될때까지 드라이버는 요구를 Pending시켜 둡니다. (이러면 어플리케이션은 멈춰있게 됩니다. 혹은, 별도의 스레드를 또하나 만들어 드라이버에게 요구할 수도 있으며 역시 그때는 스레드가 멈춰 있게 됩니다.) 그러다가, 드라이버는 인터럽트나 타이머에 의해 디바이스로 부터 들어오는 값을 어플리케이션에게 넘겨줘야 하는 시점에 Pending 상태를 풀어 데이타를 넘겨주게 되는 것이지요.
이렇게 넘어온 데이타의 값에 따라 해당하는 함수를 호출한다거나, 어떤 처리를 해주면 되겠죠?
이러한 예제들은 Walter Oney의 WDM서적이나 관련 예제 소스들에서 찾아 보실 수 있습니다.
도움이 되었길 바라겠습니다.
>드라이버를 공부한지 얼마 안되는 상태입니다.
>저는 장비제어를 하는데.. 모션 콘트롤러와 i/o보드를 사용합니다. 그런데 일반 어플에서는 10ms 정도에서 제어함수를 돌립니다. 그래서 좀더 빠르게 하드웨어 정보를 얻고 제어를 할 수 있었으면 해서 드라이버를 공부하고 있습니다. 그런데. 드라이버를 공부하고 작성중에 드라이버에서 쓰레드나 인터럽트를 만들어 응용프로그램의 제어 함수를 실행시킬수 있는 방법이 없을까 고민하게 되었습니다. 어떠한 방법이 없을까요. 공부한지 얼마 안되어서 전체적인 흐름이나 구조가 파악이 안되어서 되는지 안되는지. 알 수가 없습니다. 가능한 방법이 있다면 좋겠습니다. 장문을 읽어 주셔서 감사합니다.
DLL 도 성격 나름입니다만,
어플리케이션과 거의 동일하다고 보시면 되겠습니다.
즉, 먼저번에 답변드린 내용에서 "어플리케이션"을 DLL이라 생각하셔도 무방하답니다^^
>답변 정말 고맙습니다.
>죄송하지만 한가지 더 질문할께요.
>Dll로 작성된 함수는 드라이버에서 사용가능한지요.