작성
·
479
2
다음 4가지 우선순위 설정에 관해서 기존 시스템에 freertos 포팅시 기존시스템의 인터럽트와 충돌하지 않기 위해 설정하는거 같아 보입니다.
기존 시스템 configPRIO_BITS = 5 인 상태이며
사용하던 uart interrupt priority 1인 상태에서 freertos 를 포팅하고싶은데
다음에 값들이 어떤 관계가 있는지 모르겠습니다.
configLIBRARY_LOWEST_INTERRUPT_PRIORITY
configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY
configKERNEL_INTERRUPT_PRIORITY
configMAX_SYSCALL_INTERRUPT_PRIORITY
답변 1
1
안녕하세요. 김영선님!
수백 단어의 글보다는 한장의 그림이 때로는 이해하기 더 쉬울때가 많습니다.
시간을 들여 표를 그려보았습니다. 도움이 되셨으면 합니다 ^^
표에서 보이는 5, 15 등의 우선순위 값 설정은 제 강의에서의 디폴트 값이면서 동시에 STM32CubeIDE 디폴트 값이기도 합니다. 참고해주세요
자세한 내용을 위의 표를 참고해주시고 핵심만 간추려 보겠습니다. 열거하셨던 4가지 상수 값 중에 가장 중요한 상수는 2가지(configKERNEL_INTERRUPT_PRIORITY, configMAX_SYSCALL_INTERRUPT_PRIORITY) 입니다. 이 상수값이 주로 사용되는 곳은 freeRTOS 소스 중에서 'port.c' 입니다
이 상수값은 각각 FreeRTOS 에서 지원하는 인터럽트 우선순위의 하방(bottom)과 상방(top)을 결정짓는 역할이죠. 그렇다고 해서 이 구간내의 우선 순위만 사용할 수 있는 것은 아닙니다.
NON-RTOS HW Interrupts 범주의 인터럽트들은 RTOS 에서 관리하는 대상이 아니기 때문에 장점과 단점을 함께 가집니다.
장점을 먼저 말씀드리자면, 언제든지 RTOS 을 선점할 수 있습니다. 여기에는 사용자 코드 뿐만 아니라 커널도 해당됩니다. 이 장점은 언제든지 단점으로 돌변할 수도 있는데, 인터럽트 실행 시간을 최적화 하지 않은 상태에서 사용하면 RTOS 실행의 안정성을 해칠 수 있습니다.
uart interrupt 의 우선순위를 1로 사용한다고 말씀하셨습니다.
uart 인터럽트를 RTOS awareness 인터럽트나 NON RTOS 인터럽트 중에서 선택하시면 됩니다.
이 또한 표를 참고해서 이해해주시면 될 것 같습니다.
추가적인 궁금한 점 있으시면 다시 글 남겨주세요
감사합니다. 표로 보내 이해가 잘되네요^^