작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
399
1
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요
강의를 거의 다 들었습니다.
RTOS에 대해서는 처음 공부해보는 중입니다.
TOUCH GFX 프로그램으로 버튼 UI를 구성하였고 버튼을 클릭하면TIMER INTERRUPT를 이용하여 스텝 모터나 LED를 제어하고 싶습니다.
버튼을 클릭 시 메인 task를 통해 제어 함수를 구동하게 만들고 싶은데 task와 인터럽트가 꼬이면서 동작이 되지 않습니다.
TASK에서 UI 버튼을 감지하고 TIMER 인터럽트를 실행 시키려고 했는데 해당 방법은 좋지 않은 방법인가요?
모터나 LED등 TIMER 인터럽트가 연속적으로 발생될경우에는 시스템을 어떤식으로 구성해야할까요..?
답변 2
0
안녕하세요, 최지선님!
freertos + touchgfx + 타이머 어플리케이션 만들기는 touchgfx designer 을 설치하신 후 이용할 수 있는 템플릿 프로젝트들을 활용하시면 좋습니다.
touchgfx 튜토리얼도 참고해보세요
https://support.touchgfx.com/ko/docs/tutorials/tutorial-01
템플릿들 모두 freertos 을 기반으로 구현되어 있죠. 또한 stm32cubeIDE 도 지원합니다.
아래 buttonClicked 함수는 사용자가 화면속 버튼을 누르면 실행되는 함수입니다. 사용자 코드와 touchgfx 라이브러리는 이런식으로 인터페이스 됩니다. 태스크를 어떻게 작성해야할지도 여러개의 템플릿 예제속에서 찾으실 수 있습니다.
void MainView::buttonClicked()
{
// 타이머 시작
HAL_TIM_Base_Start_IT(&htimX);
}
0
안녕하세요, 인프런 AI 인턴입니다.
최지선님의 경우, STM32와 TOUCH GFX를 사용하여 UI 버튼 클릭 시 타이머 인터럽트를 이용해 스텝 모터나 LED를 제어하는 기능을 구현하고 싶으신 것으로 이해됩니다. FreeRTOS를 사용하면서 task와 인터럽트 사이에 문제가 발생하는 것 같군요.
제가 찾은 정보에 따르면, 인터럽트와 태스크를 혼용하여 사용할 때 고려해야 할 몇 가지 핵심 사항이 있습니다. 인터럽트 서비스 루틴(ISR) 내에서는 가능한 한 빠르게 처리하고 반환하는 것이 좋으며, 복잡하거나 시간이 걸리는 처리는 태스크에서 수행하는 것이 바람직합니다. 이는 시스템의 전반적인 반응성과 실시간 성능을 유지하는 데 도움이 됩니다.
RTOS 환경에서는 인터럽트가 발생할 때 해당 인터럽트와 관련된 태스크를 깨우거나 메시지/이벤트를 전달하여 태스크가 처리하게 하는 방법을 주로 사용합니다. FreeRTOS에서는 이러한 메커니즘을 지원하는 다양한 API를 제공합니다. 예를 들어, 인터럽트 서비스 루틴에서 태스크에 신호를 보내기 위해 큐나 세마포어를 사용할 수 있습니다.
다만, 최지선님의 질문과 관련하여, 직접적으로 이와 유사한 환경에서의 문제를 다뤘던 구체적인 사례가 담긴 답변을 찾지 못했습니다.
하지만, 멀티태스킹 환경에서 모터 제어를 다룬 다음 답변이 일부 도움이 될 수 있습니다:
- 멀티태스킹에서의 PWM 제어 관련 질의응답에서는 PWM 제어와 멀티태스킹 환경이 어떻게 조화롭게 작동할 수 있는지에 대한 설명이 포함되어 있습니다. 이는 타이머 인터럽트와 유사한 맥락에서의 고민에 도움이 될 수 있습니다.
현재 제공된 정보로는 최지선님의 문제를 직접적으로 해결해드릴 수 있는 구체적인 해답을 찾지 못했습니다. 인터럽트와 태스크 간의 상호 작용을 설계할 때는, 인터럽트 핸들러에서는 최소한의 작업만 수행하고 복잡한 로직은 태스크에서 처리하도록 구조를 설계하는 것이 일반적인 접근법입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 감사합니다,
말씀해주신 대로 동작 시켜보았습니다.
timer가 동작하면 task가 먹통 되는 증상이 있는데 timer interrupt가 task 보다 우선순위가 높아서 timer가 동작 된 이후로는 task가 동작하지 않는 걸까요?