RTEMS C언어 어플리케이션은 아래의 소스코드 형태와 같이 가장 기본적인 설정(#define)이 포함되어야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #include <bsp.h> #include <stdio.h> #include <stdlib.h> #include <rtems.h> rtems_task task1(rtems_task_argument unused); rtems_task Init(rtems_task_argument ignored) { rtems_id tid; rtems_status_code status; rtems_name name; name = rtems_build_name('T', 'A', 'S', 'K'); status = rtems_task_create(name, 1, RTEMS_MINIMUM_STACK_SIZE, RTEMS_NO_PREEMPT, RTEMS_FLOATING_POINT, &tid); if (status != RTEMS_SUCCESSFUL) { printf("rtems_task_create failed with status of %d.\n", status); exit(1); } status = rtems_task_start(tid, task1, 0); if (status != RTEMS_SUCCESSFUL) { printf("rtems_task_start failed with status of %d.\n", status); exit(1); } status = rtems_task_delete(RTEMS_SELF); printf("rtems_task_delete returned with status of %d.\n", status); exit(1); } rtems_task task1(rtems_task_argument unused) { for( ;; ) } #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER #define CONFIGURE_RTEMS_INIT_TASKS_TABLE #define CONFIGURE_MAXIMUM_TASKS 3 #define CONFIGURE_INIT #include <rtems/confdefs.h> | cs |
가장 기본적인 형태로 Init 함수에서 rtems_task_create 함수를 통해 새로운 RTEMS 태스크를 생성한다.
인자로는 RTEMS 태스크의 이름, 우선순위, 스택 크기, 모드, 특성, id 값이 필요하다.
- 이름 : rtems_build_name 함수를 사용하여 형식에 맞도록 생성해준다.
- 우선순위 : 1~255의 값을 가지며 낮을수록 높은 우선순위를 뜻한다.
- 스택 크기 : 최소한의 스택크기로 설정하는 것이 좋다.
이를 위해 RTEMS_MINIMUM_STACK_SIZE 를 사용하는데 해당 값은 시스템 마다 상이하다.
- 모드 : 선점형(RTEMS_PREEMPT), 비선점형(RTEMS_NO_PREEMPT),
타임슬라이싱(RTEMS_TIMESLICE), ASR(RTEMS_ASR/RTEMS_NO_ASR) 등
'|' 를 사용해 여러가지를 복합적으로 사용할 수 있다.
가장 기본적인 모드의 사용은 RTEMS_DEFAULT_MODES를 사용한다.
- 특성 : 부동 소수점(RTEMS_NO_FLOATING_POINT/RTEMS_FLOATIONG_POINT), 글로벌/로컬(RTEMS_GLOBAL/RTEMS_LOCAL)
'IT > RTEMS' 카테고리의 다른 글
RTEMS 태스크의 실행 과정 (0) | 2016.09.30 |
---|---|
RTEMS 커널에 파일 추가 혹은 삭제하기 (0) | 2016.09.30 |
Sparc 계열을 위한 RTEMS 커널 컴파일 하기 (0) | 2016.09.30 |
Ubuntu에서 LEON 용 RTEMS Corss Compiler (RCC) 설치하기 (0) | 2015.04.17 |