|
궁금한게 생겼네요.
나중에 하드웨어 관련 답변을 달때 참고하고 싶습니다.
대충 아래와 같은 코드 구조겠지요
m->set_work();
while(m->is_done())
NULL;
show_msg("done");
작업하는 환경에서의 모터가 어느 수준의 인터페이스를 갖는지 궁금합니다.
일반적인 모터들이 set_work() 또는 is_done()을 호출하고 나서
다시 제어권을 얻는데까지 각각 걸리는 block time이 얼마나 되나요?
전 해당 업종과 관련이 없으니 코드를 봐야만 어떤게 좋은지 판단할 수 있기 때문에..
모터에 작업을 걸고, 끝날때까지의 시간이 아니라, 2가지 함수를 콜하고 되돌려 받기까지 각각의 시간이 궁금합니다.
그리고 LED와 관련된 제어 시간도 알고 싶습니다.
phenix 님이 쓰신 글 :
: 댓글이 메일로 와서 봤습니다. 마술감자님과 싸우자는 것 아니니 충분히 읽어보고 판단하시길...
:
: 저는 지난 6년간 motion controller 여러종류를 사용해왔고 지금도 현업에서 일하고 있습니다.
: 아마 질문자는 timer에서 while loop를 통해 motion done을 확인했을 겁니다. (소스는 보지 못했지만...)
: 질문자는 polling방식과 event방식중 polling방식을 선택했고 이것을 timer안에 while loop를 통해 상태를 파악했겠지요. 그래서 GUI가 원활히 동작하지 않았겠지요...
: 저도 질문자와 같은 초보자시절에는 같은 착오를 범했고 그것에 polling 방식에 대한 가장 안정적인 해결방법이 thread를 사용하는 것이고 이는 저 뿐만 아니라 이 업종에 종사하는 대다수의 사람들이 사용합니다.
:
: 단축구동에서는 마술감자님의 답변처럼 하면 될수도 있습니다. 그러나 2,3,4... 여러축이 구동하게 된다면 그리고 여러 IO와 엮이게 된다면 님의 답변방법으로는 한계에 부딛히게 됩니다.
:
: 물론 thread를 사용해야 겠다면 당연히 동기화를 알아야 겠지요.
: 그러나 이것을 공부하고 말고는 질문자가 선택할 사항입니다.
:
: 하지만 이러한 방법이 있으나 당신 수준에서는 이정도의 방법을 써라 하는것은 아는자의 논리가 아닐런지요...
: 정말 "장기적"으로 질문자를 생각한다면 어느 방법이 맞을까요?
:
: 그리고 질문자의 의도를 정확히 파악하신다면 질문자의 질문중 "서로 불리할려고 해도 쉽게 안되더군용", "서로 다르게 동작하게끔 하는 방법" 이란것의 의미는 다른 process를 사용하고 싶다는 의미가 아닐런지요.
:
:
:
:
:
: 마술감자 님이 쓰신 글 :
: : 쓰레드를 쓰라고 하려면 코드를 정확히 판단하고 답변을 달아야 합니다.
: : 모터 관련 코드가 다음과 비슷하다면 쓰레드를 사용하지 않아도 충분히 코딩이 가능합니다.
: :
: : while(is_done() == false)
: : NULL;
: :
: : 쓰레드를 사용하면 코드가 위와 같던, 아니던 100% 해결은 될 겁니다.
: : 그런데 특정 기술이나 패턴을 사용하지 않아도 될 곳에 사용하면 부작용이 더 큽니다.
: :
: : 멀티 쓰레드를 사용하려면 충분한 학습을 하고 해야 하는데
: : 무작정 적용하고, 안되니까 질문 하고, 또 답글 달면 1차적으로 해결 하고 반복하게 됩니다.
: : 그 증거로, 바로 위에 질문글이 올라왔지요 [thread내에서 다른 클래스 참조...]
: :
: : 질문자의 학습수준을 생각해서 답글을 달았으면 좋겠습니다.
: :
: : 견웅님도 제가 분명히 코드를 더 보여달라고 했는데,
: : 마음이 급해서 그러셨겠지만 답변자의 의견을 고려하시는것이 장기적으로 도움이 됩니다.
: :
: : phenix 님이 쓰신 글 :
: : : thread 사용하세요.
: : : 이게 정확한 답입니다.
: : :
: : : GUI에서 (정확히 GUI thread에서)
: : : motor의 motion done check하랴 (아마도 님의 while loop의 목적?)
: : : GUI LED 구동하랴 정신이 없을 겁니다.
: : : motion과 관련된 부분은 thread를 사용하여 GUI를 쉬게 해주세요.
: : :
: : : 견웅 님이 쓰신 글 :
: : : : 이번에 프로제트 하면서 모터를 구동하는 작업을 하게 됐습니다...
: : : : 모터보드에서 제공하는 라이브어리를 이용해서 작업을 합니다..
: : : : 그런데 문제가 생겨서 음.. 여기에 질문을 올립니다..
: : : :
: : : : 현재 모토를 구동하면서 문제가 타임으로 해서 함수를 실행합니다.
: : : : 모토구동하는 함수인데.. 또다른 타임만들어서 led를 움직이는 작업을 합니다....
: : : : 이러한 작업을 하는데 있어.. 문제가 생깁니다...
: : : : 둘다 따로 돌아야 하는데.. 현재 모터가 많은 작업을 하면 led가 느리게 움직입니다.
: : : : 항상 모터와 같이 움직이는 현상이 발생합니다..
: : : : 현재 둘다 동기화가 된것같은데.. 서로 불리할려고 해도 쉽게 안되더군용...
: : : : 음.. 현재 모터쪽에 while(0) 이러한 구문이 좀 있습니다.
: : : : 그래서 Application->ProcessMessges를 해서 해보왔지만 해결이 안되더군용...
: : : : 음... 서로 다르게 동작하게끔 하는 방법이 없나 해서..
: : : : 질문드립니다. 많은 의견좀 주세요.. ^^
|