[FreeRTOS] RTOS 개론

seopppio·2024년 10월 28일

FreeRTOS

목록 보기
1/14

이 시리즈는, FreeRTOS 개론을 공부하며, 헷갈리는 부분들을 정리해둔 자료 입니다

태스크, 프로세스, 쓰레드는 엄밀히는 다르지만, 동일하다고 가정하자.

RTOS는 멀티테스킹이 필요한 환경에서, 실시간성을 만족하기 위해 사용하곤 한다.

그리고 임베디드 시스템 용 운영체제다

RTOS 특징

Hard Real Time

Scalability

프로그램 크기들이 추가하거나, 덜어냄에 따라 유연하게 달라질 수 있다

Preemptive(선점 가능)

Multitasking

우선순위 가지는 태스크 무제한 생성 가능

Deterministic(예측 가능)

가장 중요한 특징

Portability

Robustness

RTOS 개론

Blocking I/O, Nonblocking I/O

예시, 키보드에서 입력 받을 때

getch() 의 경우, 키보드에서 입력 받을 때 까지 CPU가 대기

  • 예시 코드
while(1){
c=getch(); #여기서 CPU가 대기 상태로 들어감
if(c)
	printf("키보드 입력 되었습니다")
else
	printf("에러 발생)
}

kbdhit()의 경우, 키 입력이 있는지 계속 확인하고 있으면 넘기고 없으면 안 넘김 -> CPU가 대기 상태로 들어가지는 않는다
*예시 코드

char c;
while(1){
	if (kbdhit()){ #여기서 키입력이 있는지 계속 확인한다. CPU가 대기하지 않음
    	int c;
        c = getch();
        if (c == 'q' || c == 'Q' || c == EOF)
        	break;
            }
}

커널의 시계(RTOS 타이머)

커널은 시계의 수단으로 하드웨어의 타이머 장치 사용
타이머 장치를 주기적으로 인터럽트 발생하게 하여, 발생 할 때 마다 타이머/인터럽트 핸들러가 실행 됨

타이머 인터럽트 핸들러 내부에는 static unsigned long TICK++ 코드가 있다
TICK이 시간의 흐름을 나타내고, 현재의 시간을 나타낸다

ex)Hz=1000(초당 1000개), TICK변수가 21000이면, 현재 시간이 21초임을 알 수 있다.

태스크 형태

무한 루프 함수와, 스스로 삭제하는 형태 함수 가능
태스크는 리턴하면 안 되어서 void 로 리턴, 전달인자에는 보이드 포인터를 쓰곤 한다
태스크 만들 때, Kernel API 이용해서, 태스크화 할 수 있다

0개의 댓글