인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

김소명님의 프로필 이미지

작성한 질문수

FreeRTOS 프로그래밍

timebase source를 systick timer로 하신 이유

작성

·

119

·

수정됨

1

timebase source를 왜 systick timer로 하신 이유가 궁금합니다. 보통 새로운 stm32 프로젝트에서 FreeRTOS를 추가하면 꼭 timebase를 systick timer가 아닌 다른 timer로 설정하라는 경고가 나오는데 왜 systick timer로 하신 건가요?

답변 2

1

홍영기님의 프로필 이미지
홍영기
지식공유자

안녕하세요, 김소명님!
제 의견을 정리해서 전달하기 위해 시간이 좀 필요했습니다. 답변드리겠습니다.

솔직히 말씀드리면, 제가 이 강의를 준비하면서 이 부분에 대해서 크게 의식하지 않았던 것은 확실합니다.

그 이유는 간단합니다. CORTEX-M 의 systick 은 그 이름 속에서 잘 드러나 있듯이 TICK 전용 타이머인것입니다. 그리고, 과거부터 FREERTOS 에서 줄곧 사용해왔던 타이머이기도 합니다. 마이크로씨 오에스에서도 십수년간 사용해오던 타이머 이기도 합니다. 그래서 저는 팝업 경고 메시지에 크게 의미를 두지 않았던 것 같습니다. 그리고, ST 직원이 만들어낸 그 경고 메시지도 그리 아름답지 못합니다(강력히 추천한다니? 어쩌라는 거지? 쓰라는 말인가 말라는 것인가) .

이미 오랜동안 낮은 우선순위(15)을 사용해 온 RTOS 틱 인터럽트의 우선순위를 정 반대의 논리인 높은 우선순위(0)로 바꾸려면 보다 강력한 분명한 이유가 있어야 하겠습니다.

우선순위가 높아야 한다는 주장

출처: https://shpp.freertos.org/FreeRTOS_Support_Forum_Archive/January_2016/freertos_SysTick_interrupt_priority_99f02a87j.html

그들의 주장은 이렇습니다. 1초에 1000번 빠른 속도?로 발생하는 타이머 인터럽트가 다른 하드웨어 인터럽트보다 우선순위가 낮을 경우 인터럽트를 놓칠 수 있는 위험으로인해 시간 베이스에 오차가 발생한다. 따라서 우선순위를 높여서 이 문제를 예방할 필요가 있다.

하지만,

FREERTOS 제작자와 마이크로씨 오에스의 제작자인 리처드베리와 쟝제이 라브로쉐 모두 OS 용 타이머 틱 인터럽트의 우선순위는 오히려 낮아야 한다고 말했습니다. 그런데요 이들의 논리가 더 힘 있어보입니다. 한번 쟝제이의 오래전 글을 함께 보시죠.

우선순위가 낮아야 한다는 주장

image.png

출처: https://www.iar.com/knowledge/learn/programming/6-misconceptions-about-the-rtos-tick

마무리 결론입니다.

SysTick 우선순위 설정은 정답이 있는 문제가 아니라, 사용하는 RTOS의 특성과 애플리케이션 요구사항에 따라 다릅니다. 그러므로 두 가지 주장을 참고하되, 자신의 프로젝트와 경험을 바탕으로 판단해야 합니다.

RTOS 제작자들의 권고(FreeRTOS, μC/OS 제작자)는 오랜 현장 경험을 바탕으로 하였으므로 이를 신뢰할 수 있습니다. 그러나 ST의 문서를 통해 제안된 방식 역시 특정 응용 사례에 유효할 수 있습니다.

김소명님의 프로필 이미지
김소명
질문자

자세히 설명해주셔서 감사합니다 ^^ 덕분에 많은 배움 얻게 되었습니다

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 김소명님

Stm32 프로젝트에서 FreeRTOS를 사용하실 때 timebase source를 systick timer로 설정하는 이유와 그렇지 않은 경우에 대한 궁금증을 해결해드리겠습니다.

  1. Systick Timer의 장점: Systick 타이머는 Cortex-M 프로세서에 내장된 시스템 타이머로, 일관된 타이머 동작과 인터럽트를 제공하여 간단한 시스템 시간 관리와 운영체제 스케줄링에 효과적입니다. 따라서 외부 타이머 없이도 손쉽게 RTOS Ticks를 구현할 수 있습니다.

  2. 경고 메세지의 이유: stm32CubeMX를 통해 FreeRTOS를 추가하면 다른 타이머로 설정하라는 경고가 나오기도 합니다. 이는 특정 프로젝트 구조나 타임 크리티컬 애플리케이션에서, Systick 타이머를 다른 시스템 속성과 독립적으로 사용하려는 권장 사항일 수 있습니다.

  3. 다른 타이머를 사용하는 이유: 모든 프로젝트에서 Systick 타이머가 적합한 것은 아닙니다. 특히, 정확하게 미세한 시간 간격을 측정하거나 타이머 리소스를 다른 용도로 사용해야 하는 경우, 별도의 타이머를 사용하는 것이 더 나을 수 있습니다.

관련하여 더 깊이 있는 설명을 원하신다면 유사한 질문에 대한 답변을 확인하시기 바랍니다:

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