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

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

deckster님의 프로필 이미지
deckster

작성한 질문수

FreeRTOS 프로그래밍

vTaskPrioritySet

vTaskPrioritySet

작성

·

198

1

안녕하세요 강사님,
 
해당 챕터에서 궁금한 것이 있습니다.
 
1.
 
TaskprioritySet 을 통해 태스크 우선순위를 바꾸는 것이 중요치 않고 안 바꾸는 것이 맞는 것처럼 들었습니다.
왜 그런건가요?
 
2.
 
그렇다면, TaskCreate를 통해 태스크 생성시에 우선순위 지정 또한 디폴트로 두나요?
 
프로그램의 규모에 따라 쓰레드가 수 개 ~ 수 십 여개 이상이 될 수 있을텐데 그 모든 쓰레드들이 이유없이 동일한 우선순위로 작성을 한다고 봐야 하나요?

답변 1

1

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

deckster님! 아래와 같이 질문에 대해 답변드립니다.

안녕하세요 강사님,
 
해당 챕터에서 궁금한 것이 있습니다.
 
1.
 
TaskprioritySet 을 통해 태스크 우선순위를 바꾸는 것이 중요치 않고 안 바꾸는 것이 맞는 것처럼 들었습니다.
왜 그런건가요?
 
결론부터 말씀드리자면 디버깅이나 이후 발생하는 문제에 대한 대응이 어렵습니다.
 
TaskprioritySet 함수를 절대로 사용하면 안된다고 말씀드리지는 않았습니다. 가급적 사용하지 않는 것이 좋겠다는 말씀으로 이해해 주시면 좋겠네요.
 
우리가 어떤 문제를 발견하였을 때 우리는 여러가지 정황을 통해 문제의 원인을 추론합니다. 거기에 런타임시에 변하는 태스크의 우선 순위까지 고려해야만 한다면 문제 해결은 더욱 어려워 질 수 밖에 없죠. 많은 데이터들이 상수화 되어 있다면 문제 해결에 유리할 수 있습니다. 여기서 말하는 상수라는 것은 C언어에서 말하는 CONST 하고는 다릅니다. 이를테면 int i 변수가 있는데 디버깅 중 런타임 i의 값이 45 였다면 이것을 상수라고 표현하고 있는 것입니다. 이런 데이타들을 놓고 우리는 이 값이 정상이다 혹은 오류라고 판단하게 되죠?
그런데 여기에 태스크의 우선 순위까지 고려하여 문제의 원인을 찾아내야 하는 상황이라면 그만큼 문제의 원인을 찾아내는 데 어려움이 있을것입니다.
 
또한 태스크 우선 순위를 런타임 시 변경하는 것을 허용할 경우, 촘촘한 그물망처럼 우리가 만들어 놓은 테스트 벡터 혹은 환경내에서 미꾸라지처럼 빠져나가는 테스트 항목이 발생할 수 도 있습니다. 그리고 나중에 우리가 예상하지 못한 시기나 상황에서 이 문제가 재현됩니다. 패스파인더 사례 참조
 
2.
 
그렇다면, TaskCreate를 통해 태스크 생성시에 우선순위 지정 또한 디폴트로 두나요?
 
프로그램의 규모에 따라 쓰레드가 수 개 ~ 수 십 여개 이상이 될 수 있을텐데 그 모든 쓰레드들이 이유없이 동일한 우선순위로 작성을 한다고 봐야 하나요?
라운드 로빈을 지원하는 알티오에스를 사용하고 계시다면, 태스크들은 특별한 이유가 없는 한 우선 순위를 모두 동일하게 부여하시는 것을 추천드립니다. 모든 태스크가 우선 순위가 높은 것들로만 채워져 있는 시스템이라면 그 곳에서의 우선 순위는 운용면에서 효과적이지 않습니다.
라운드 로빈을 우선순위의 기본 정책으로 운용하면서 시간에 민감한 태스크만 특별히 마감 시간을 고려하여 우선 순위를 적절히 설정해주는 것이 필요할 뿐입니다.
그 후 모든 태스크가 조화롭게 마감시간내로 동작하는지를 면밀히 모니터링 해주기만 하면 됩니다
 
 
 
deckster님의 프로필 이미지
deckster

작성한 질문수

질문하기