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함수를 호출하게 된다.
'IT > RTEMS' 카테고리의 다른 글
RTEMS 커널에 파일 추가 혹은 삭제하기 (0) | 2016.09.30 |
---|---|
Sparc 계열을 위한 RTEMS 커널 컴파일 하기 (0) | 2016.09.30 |
RTEMS C 기본 소스코드 (0) | 2016.06.01 |
Ubuntu에서 LEON 용 RTEMS Corss Compiler (RCC) 설치하기 (0) | 2015.04.17 |