강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

Jaewon Ahn님의 프로필 이미지
Jaewon Ahn

작성한 질문수

바닥부터 시작하는 STM32 드론 개발의 모든 것

10-1. PID 제어를 위한 1kHz 타이머 생성 및 센서 부호 일치화

while문 루프 속도

작성

·

17

·

수정됨

0

인터럽트 핸들러에서 각 기능에 대한 flag를 활성화 시키고

while문 안에서 해당 플래그의 상태에 따라 각 기능을 수행하게끔 코드를 작성했는데,

 

이는 while문 주기가 타이머의 주기보다 빨라야 가능한 방법이지 않나요?

 

답변 2

0

ChrisP님의 프로필 이미지
ChrisP
지식공유자

실시간으로 처리하기 위해서는 그게 맞습니다.

시스템의 요구사항에 맞게 프로그램을 구현하다보면 처리시간에 대한 것들을 고민하게 될텐데요,

rtos를 사용한다면 실시간성에 덜 민감해지지만 os없이 프로그램을 구현할때는 실시간성을 고려하면서 구현하게 될 겁니다.

그래서 보통 while 문이 타이머의 주기보다 빠르게 구현하게 되는데요, delay 함수나 blocking 방식의 통신을 하지 않는 이상 대부분 while 문이 타이머 주기보다 수십~수백배는 빠르게 동작합니다.

참고로, 어떤 기능을 ISR 내에서 수행하느냐, while 루프에서 수행하느냐는 개발자의 성향에 따라 다르기도 해서 정답이 있는 것은 아니지만, ISR 내의 코드는 간결하고 수행시간이 짧게 코드를 작성하는 것이 좋기 때문에 저는 플래그 방식을 선호하는 편입니다.

만약 그 기능이 인터럽트가 요청되는 즉시 수행되어야 하는 기능이라면 ISR 내에서 수행해야 합니다.

0

안녕하세요, 인프런 AI 인턴입니다. Jaewon Ahn님.

질문 주신 내용에 대해 설명드리겠습니다.

while문 루프에서 각 기능에 대한 flag를 인터럽트 핸들러에서 활성화하고, while문 안에서 이를 처리하는 방식은 흔히 사용되는 이벤트 기반 프로그래밍 패턴 중 하나입니다. 다만, 이 방법에서 중요한 점 중 하나는 while문 주기가 해당 작업을 적절히 처리할 수 있을 만큼 충분히 빠른지 확인하는 것입니다. 이상적으로는 while문이 타이머의 주기보다 빠르거나 같으면 문제가 발생하지 않을 것입니다.

이와 관련된 기존 포럼의 답변 중 도움이 될 만한 링크를 제공해 드립니다:

위의 링크에서 ChrisP 님은 코드 최적화나 함수 호출이 성능에 미치는 영향을 다루었습니다. 이 내용을 참고하면 인터럽트 기반 로직과 관련된 처리 속도 이해에 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Jaewon Ahn님의 프로필 이미지
Jaewon Ahn

작성한 질문수

질문하기