작성자 없음
작성자 정보가 삭제된 글입니다.
24.05.20 13:40 작성
·
153
·
수정됨
1
이전에 질문을 남겼습니다.
LCD에서 UI 터치 되면 모터 제어 Timer 동작 시켜보았습니다.
모터 제어 timer interrupt가 동작 된 후, task가 먹통 되는 증상이 있는데 timer interrupt가 task 보다 우선순위가 높아서 timer가 동작 된 이후로는 task가 동작하지 않는 걸까요?
(모터의 제어 주파수가 비 연속적으로 바뀌고 설정한 거리만큼 움직이고 스스로 인터럽트를 종료하는 모터 제어 방식입니다.)
질문이 3가지입니다.
1) Timer Interrupt 실행 시 Task보다 우선순위가 높아 Task가 동작하지 않는 것인지요?
2) 비 연속적으로 제어되는 방식이라면 모터 제어와 완료 후에 Task가 동작 할 수 있게 하는 방식은 어떤 식으로.. 처리해야 하는지 궁금합니다.
3) 만약 Timer Interrupt(모터 동작)의 선점으로 Task가 동작하지 못한다면, LCD Touch 인식을 체크하는 Task는 Timer Interrupt는 끝나고(모터 움직임 완료) 동작해야 하는 것인가요..?
답변 1
0
2024. 05. 20. 22:37
안녕하세요. 최지선님!
LCD에서 UI 터치 되면 모터 제어 Timer 동작 시켜보았습니다.
모터 제어 timer interrupt가 동작 된 후, task가 먹통 되는 증상이 있는데 timer interrupt가 task 보다 우선순위가 높아서 timer가 동작 된 이후로는 task가 동작하지 않는 걸까요?
(모터의 제어 주파수가 비 연속적으로 바뀌고 설정한 거리만큼 움직이고 스스로 인터럽트를 종료하는 모터 제어 방식입니다.)
질문이 3가지입니다.
1) Timer Interrupt 실행 시 Task보다 우선순위가 높아 Task가 동작하지 않는 것인지요?
> 타이머를 포함한 하드웨어 인터럽트들은 태스크보다 우선순위가 높습니다. 하드웨어 인터럽트 때문에 태스크가 실행되지 않는 것을 염려하신다면 충분히 가능한 일입니다. 인터럽트 핸들러 내에서 긴 처리 시간이나 대기 시간을 포함시키는 것은 바람직하지 않습니다. 이는 시스템의 응답 시간과 신뢰성에 부정적인 영향을 미칠 수 있습니다. 디버깅 해보시죠. 단, 브레이크 포인트를 이용한 디버깅 보다는 LED 을 토글시키는 코드나 printf 을 태스크 함수내에 넣어서 태스크가 실행이 되는 지를 확인하는 방법이 이 경우에는 더 효과적입니다.
2) 비 연속적으로 제어되는 방식이라면 모터 제어와 완료 후에 Task가 동작 할 수 있게 하는 방식은 어떤 식으로.. 처리해야 하는지 궁금합니다.
3) 만약 Timer Interrupt(모터 동작)의 선점으로 Task가 동작하지 못한다면, LCD Touch 인식을 체크하는 Task는 Timer Interrupt는 끝나고(모터 움직임 완료) 동작해야 하는 것인가요..?
> 답변: 2번과 3번 질문에 대해서는 제가 답변드릴 수 있는 범위를 넘어서는 질문입니다. 왜냐하면 개발 중인 프로젝트에 대해 제가 충분히 알지 못하기 때문입니다.
저라면 TOUCHGFX 튜토리얼 예제를 찾아서 분석해보겠습니다. 코드를 완벽히 분석할 필요는 없습니다. 버튼을 눌렀을 때 사용자가 원하는 액션이 실행되는 원리를 파악하는 것이 중요합니다. 그렇게 해야만 작성 중인 코드를 완전히 이해하고 제어할 수 있습니다. 그리고 타이머 제어 및 인터럽트 코드를 하나씩 추가하면서 확인해보시기 바랍니다. 좋은 결과 있으시길 바랍니다.