본문 바로가기
IT/RTEMS

RTEMS C 기본 소스코드

by SH_SH 2016. 6. 1.



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)