도와주세요!!
글 수 15,339
2003.11.11 16:29:17 (*.254.139.46)
6681
저번에 10400 bps는 결국 디바이스 드라이버에서 레지스터를 건드려서
해결했습니다. 10400bps로 열면 근접한 속도는 나오는데, 신호를 제대로
인식하지 못하는 문제가 발생하더라구요. 말씀하신 통신오차가 좀 컸나
봅니다. 하지만, 덕분에 문제 해결의 실마리를 잡았기 때문에 정말로
감사하고 있답니다. ^^
지금 질문할 내용은 응용프로그램에서 주기적인 신호를 보내야만 하는
상황인데 감을 잡고 있지 못해서인데요.
연결된 외부장치는 주기적으로 신호를 보내주지 않으면 통신을 스스로
종료해버립니다. 그래서 5초 간격으로 신호를 보내어 주려고 합니다.
현재 소켓과 시리얼을 열어서 소켓에서 들어온 명령어를 해석해서
시리얼로 보내고 받은 신호를 소켓을 통해서 다시 보내는 서버 프로그램이
이지보드에서 돌아가고 있는데요.
결국에는 서버 프로그램에서 이런 역할을 수행해야 하는데, 서버프로그램도
응용프로그램의 일종이라 정확히 5초간격으로 이런 신호를 보내기가 좀
어려울것 같은 생각이 들었습니다.
서버 프로그램은 시리얼에 부착된 장치와 통신하기 위해서 GPIO 제어라인을
사용하는 디바이스 드라이버를 사용하게 됩니다. 여기에 소스를 추가시켜
주어서 디바이스 드라이버에서 서버프로그램으로 신호를 보내어서
서버프로그램이 이 신호를 인식, 신호를 보내게끔 하면 어떨까 생각하고
있습니다. 만일 5초동안 장비와 아무런 통신이 없으면 신호를 보내고,
그 사이에 어떤 통신이 되고 있었다면 마지막 통신한 때부터 다시 5초를
계산해서 시간을 다시 설정하는 루틴을 집어넣으면 어떨까 생각을 해봤습니다.
그런데, 이렇게 생각을 했지만, 이것이 가능한 방법인지 궁금하거든요.
디바이스 드라이버에서 주기적으로 자신을 호출한 서버프로그램에 신호를
줄 수 있는지, 그리고 신호를 주면 응용프로그램이 이를 받아서 처리할려면
어떤 과정을 거쳐야 하는지 궁금합니다.
가장 힘든것이 이게 가능한 방법인지 아닌지 모른다는 것이 정말 힘드네요.
부탁드립니다.
해결했습니다. 10400bps로 열면 근접한 속도는 나오는데, 신호를 제대로
인식하지 못하는 문제가 발생하더라구요. 말씀하신 통신오차가 좀 컸나
봅니다. 하지만, 덕분에 문제 해결의 실마리를 잡았기 때문에 정말로
감사하고 있답니다. ^^
지금 질문할 내용은 응용프로그램에서 주기적인 신호를 보내야만 하는
상황인데 감을 잡고 있지 못해서인데요.
연결된 외부장치는 주기적으로 신호를 보내주지 않으면 통신을 스스로
종료해버립니다. 그래서 5초 간격으로 신호를 보내어 주려고 합니다.
현재 소켓과 시리얼을 열어서 소켓에서 들어온 명령어를 해석해서
시리얼로 보내고 받은 신호를 소켓을 통해서 다시 보내는 서버 프로그램이
이지보드에서 돌아가고 있는데요.
결국에는 서버 프로그램에서 이런 역할을 수행해야 하는데, 서버프로그램도
응용프로그램의 일종이라 정확히 5초간격으로 이런 신호를 보내기가 좀
어려울것 같은 생각이 들었습니다.
서버 프로그램은 시리얼에 부착된 장치와 통신하기 위해서 GPIO 제어라인을
사용하는 디바이스 드라이버를 사용하게 됩니다. 여기에 소스를 추가시켜
주어서 디바이스 드라이버에서 서버프로그램으로 신호를 보내어서
서버프로그램이 이 신호를 인식, 신호를 보내게끔 하면 어떨까 생각하고
있습니다. 만일 5초동안 장비와 아무런 통신이 없으면 신호를 보내고,
그 사이에 어떤 통신이 되고 있었다면 마지막 통신한 때부터 다시 5초를
계산해서 시간을 다시 설정하는 루틴을 집어넣으면 어떨까 생각을 해봤습니다.
그런데, 이렇게 생각을 했지만, 이것이 가능한 방법인지 궁금하거든요.
디바이스 드라이버에서 주기적으로 자신을 호출한 서버프로그램에 신호를
줄 수 있는지, 그리고 신호를 주면 응용프로그램이 이를 받아서 처리할려면
어떤 과정을 거쳐야 하는지 궁금합니다.
가장 힘든것이 이게 가능한 방법인지 아닌지 모른다는 것이 정말 힘드네요.
부탁드립니다.