본문 바로가기
IT/RTEMS

RTEMS 태스크의 실행 과정

by SH_SH 2016. 9. 30.


RTEMS 어플리케이션에서 태스크의 실행은 rtems_task_start 함수를 통해 진행된다. 해당 함수는 커널에서 아래와 같은 과정으로 진행된다.

- RTEMS 어플리케이션 레벨에서 태스크의 정보를 인자로 받음

- RTEMS 어플리케이션 레벨의 함수는 RTEMS 커널의 Core 함수중 Thread 관련 함수를 호출


좀 더 자세하게 함수 호출 과정을 살펴보면 아래와 같다.

rtems_task_start 함수는 _Thread_Start 함수를 호출하고, 해당 함수는 _Thread_Ready 함수를 호출한다. 

해당 부분은 dormant 한지 if문을 통해 확인하고 호출된다.


_Thread_Start 함수에서는 태스크의 entry_point를 성정하고, _Thread_Ready 함수는 _chain_append_unprotected 함수를 통해 해당 태스크 노드를 체인의 끝에 삽입한다. 체인에 삽입되었다는 것은 앞으로 태스크가 실행이 될 수 있다는것을 말한다.


다시 rtems_task_start로 돌아오면 _Thread_Enable_dispatch 함수를 호출한다. 만약 _Thread_start에서 thread가 dormant 상태면 바로 _Thread_Enable_Dispatch함수를 호출하게 된다.