페이지 선택

Thread 데모

 

MXOS는 멀티스레드를 지원하고 있으며 이 스레드들은 각자 독립적인 실행 흐름을 갖고 있다.

스레드는 생성된 이후 우선순위에 따라 O/S의 스케쥴러에 의해 배정된 시간에 자신의 코드를 실행해 갈 것이며,

생성부터 소멸 전까지 아래 테이블과 같은 상태 중 하나에 있게 된다.

 

여기서 예제는 스레드에 대한 생성과 소멸에 대한 기본적인 예만 보이고 있어 스레드에 대한 내용을 간파하기는 어려울 것이다.

주어진 예제에서 힌트를 얻고  API 를 참조해 코드를 수정 보면서 스레드에 대한 동작과 메커니즘을 이해해 보도록 한다. 

스레드는 RTOS 환경의 프로그래밍에서 핵심 역할을 하는 만큼 처음부터 실마리를 잘 플어 가도록 하자. 처음부터 찐을 빼자~~ 

 

⊕ mxos 시스템이 초기화 되면 기본적으로 main 함수라는 스레드가 생성되고 운행되며 우선권은 7으로 설정되어 있다.

 

 

1. thread 데모 구현내용

코드위치 demos/os/os.c

 

변수선언
/* demo thread */
struct thread_info {
    uint8_t prio;
    char    name[16];
};
 

 

 

thread1

스레드가 생성되고 실행되면 실행되었다는 표시로 thread n enter를 로그로 출력한다. 이후 10회의 while loop를 돌면서 스레드는 매번 1초 동안

정지상태(suspend)로 있게 된다.   while 루프(loop)에서 빠져 나오면 스레드는 자신을 소멸키며, 가지고 있던 자원을 깨끗이 시스템에 환원한다.

static void _thread1(void *arg)
{
    struct thread_info *p=(struct thread_info*)arg;
    int i=0;
    app_log(“thread %s enter”, p->name);
    while(1) {
        app_log(“thread %s, prio %d, i=%d”, p->name, p->prio, i++);
        mos_sleep(1); //현재의 thread, 즉 _thread1 스레드를 1초 동안 정지상태로 만든다.
        if (i == 10)
            break;
    }
    app_log(“thread %s EXIT”, p->name);
    free(arg);
    mos_thread_delete(NULL);

}

 

 

theread_demo
10개의 스레드를 생성 시킨 후, 모든 thread를 Sleep 상태로 들어가도록 한다.    Sleep 상태로 들어간 스레드는 우선권이 높은 순으로 동작을 하게 될 것이다.

static void thread_demo(void)

{

    int i;
    struct thread_info *p;
    mos_thread_id_t t[10];
    app_log(“thread demo start”);
    for(i=0;i<10;i++) {
        p = malloc(sizeof(struct thread_info));
        p->prio = i;
        sprintf(p->name, “thread%d”, i);
        t[i] = mos_thread_new(p->prio, p->name, _thread1, 0x500, p);
    }
    for(i=0;i<10;i++) {
        mos_thread_join(t[i]);
    }
    app_log(“thread demo end”);
    mos_sleep(1); //현재의 스레드, 즉 main 스레드를 1초 동안 정지 시킨다.

}

 

 

main 함수
int main(void)
{
    thread_demo();
   //timer_demo();
   //sem_demo();
   //queue_demo(1);
   //queue_demo(2);
   //queue_demo(3);
   //queue_demo(4);
    return 0;

}

 

 

 

 

2. thread 데모 동작확인

 

♦ 컴파일하고 어플리케이션을 flash에 다운로드 → mxos make os@emw3080 download jtag=jlink

 

♦  EMW3080을 Reset 하고 DBG 시리얼포트를 통해 동작을 확인한다.

 

 

Viewed Page List