chapter 05 임베디드 소프트웨어 구조 살펴보기

19
Chapter 05 임임임임 임임임임임 임임 임임임임 5.1 임임임임임 임임 5.2 임임임임 임임임임임 임임 5.3 임임임임임임임 임임 5.4 RTOS 임임 5.5 임임임 임임임임임 임임임 임임

Upload: mateja

Post on 09-Jan-2016

64 views

Category:

Documents


2 download

DESCRIPTION

Chapter 05 임베디드 소프트웨어 구조 살펴보기. 5.1 라운드로빈 구조 5.2 인터럽트 라운드로빈 구조 5.3 펑션큐스케줄링 구조 5.4 RTOS 구조 5.5 알맞은 소프트웨어 구조의 선택. 임베디드 소프트웨어 구성. 하드웨어와 통신하기 위한 부분 인터럽트 처리 애플리케이션 서비스를 위한 부분 Task code. 임베디드 소프트웨어 구조를 결정하기 위한 요소. 얼마나 많은 시스템의 응답을 제어해야 하는가 ?. 라운드로빈 구조. 가장 단순한 방식 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Chapter 05 임베디드 소프트웨어 구조 살펴보기

Chapter 05임베디드 소프트웨어 구조 살펴보기

5.1 라운드로빈 구조

5.2 인터럽트 라운드로빈 구조

5.3 펑션큐스케줄링 구조

5.4 RTOS 구조

5.5 알맞은 소프트웨어 구조의 선택

Page 2: Chapter 05 임베디드 소프트웨어 구조 살펴보기

2

임베디드 소프트웨어 구성 하드웨어와 통신하기 위한 부분

인터럽트 처리

애플리케이션 서비스를 위한 부분 Task code

Page 3: Chapter 05 임베디드 소프트웨어 구조 살펴보기

3

임베디드 소프트웨어 구조를 결정하기 위한 요소

얼마나 많은 시스템의 응답을 제어해야 하는가 ?

Page 4: Chapter 05 임베디드 소프트웨어 구조 살펴보기

4

라운드로빈 구조 가장 단순한 방식

서비스가 필요한 장치들은 순차적으로 순회하면서 서비스를 해주는 방식

비교적 느린 응답시간을 허용하거나 , 서비스를 요구하는 장치가 자주 변하지 않는 경우

e.g. 디지털 멀티미터 , 디지털 시계 , 전자레인지 etc.

Page 5: Chapter 05 임베디드 소프트웨어 구조 살펴보기

5

라운드로빈 방식이 부적절한 경우 마이크로 프로세서가 메인 루프를 도는 시간 보다 짧은 응답시간을 요하는

경우 수행할 작업이 긴 시간을 소요하는 경우 이 구조는 깨어지기 쉬움

다른 장치의 추가

Page 6: Chapter 05 임베디드 소프트웨어 구조 살펴보기

6

라운드 로빈 구조의 예void main (void)

{

while (TRUE)

{

if (!! I/O 장치 A 가 서비스가 필요하다면 )

{

!! I/O 장치 A 에 대해 필요한 것을 처리한다 .

!! 데이터를 I/O 장치 A 에 넘겨주거나 가져온다 .

}

if (!! I/O 장치 B 가 서비스가 필요하다면 )

{

!! I/O 장치 B 에 대해 필요한 것을 처리한다 .

!! 데이터를 I/O 장치 B 에 넘겨주거나 가져온다 .

}

. 생략표시 .

if (!! I/O 장치 Z 가 서비스가 필요하다면 )

{

!! I/O 장치 Z 에 대해 필요한 것을 처리한다 .

!! 데이터를 I/O 장치 Z 에 넘겨주거나 가져온다 .

}

}

}

Page 7: Chapter 05 임베디드 소프트웨어 구조 살펴보기

7

인터럽트 라운드로빈 구조 라운드로빈 구조에 인터럽트 개념 도입 처리방식

1. 메인 루프를 반복 탐색

2. 인터럽트 발생시 해당 ISR 로 분기

3. 인터럽트 처리 후 , 수행할 Task Code flag 설정

4. Task Code 수행 , flag reset

- Task code 처리 중 인터럽트 발생시 인터럽트 우선 처리 단점

ISR 과 main 의 task code 사이에서 데이터 공유 문제가 발생할 수 있음 모든 태스크 코드들이 동일한 우선순위로 실행됨

Page 8: Chapter 05 임베디드 소프트웨어 구조 살펴보기

8

인터럽트 라운드로빈 구조의 예 인터럽트 라운드로빈 구조의 예

BOOL fDeviceA = FALSE;

BOOL fDeviceB = FASLSE;

.

.

.

BOOL fDeviceZ = FALSE;

Void interrupt vHandleDeviceA (void)

{

!! I/O 장치 A 를 처리한다

fDeviceA = TRUE;

}

void interrupt vHandleDeviceB (void)

{

!! I/O 장치 B 를 처리한다

fDeviceB = TRUE;

}

.

.

.

void interrupt vHandleDeviceZ (void)

{

!! I/O 장치 Z 를 처리한다

fDeviceZ = TRUE;

}

Page 9: Chapter 05 임베디드 소프트웨어 구조 살펴보기

9

인터럽트 라운드로빈 구조의 예 (Cont’d)

void main (void)

{

while (TRUE)

{

if (fDeviceA) {

fDeviceA = FALSE;

!! I/O 장치 A 로 데이터를 넘겨 주거나 가져 온다

}

if (fDeviceB) {

fDeviceB = FALSE;

!! I/O 장치 B 로 데이터를 넘겨 주거나 가져 온다

}

. . .

if (fDeviceZ) {

fDeviceZ = FALSE;

!! I/O 장치 Z 로 데이터를 넘겨 주거나 가져 온다

}

}

}

Page 10: Chapter 05 임베디드 소프트웨어 구조 살펴보기

10

라운드로빈 구조를 위한 우선 순위 레벨

Page 11: Chapter 05 임베디드 소프트웨어 구조 살펴보기

11

펑션큐스케줄링 구조의 특징 ISR 은 인터럽트 발생시 수행해야 할 코드 ( 함수 ) 에 대한 포인터를 펑션

큐에 삽입한다 . 메인 함수는 펑션 큐로부터 함수를 읽어와서 수행한다 . 인터럽트 루틴이 발생하는 순서대로 메인 함수가 함수를 호출해야 할 필요는

없다 . 즉 , 우선 순위를 고려해서 함수가 호출되도록 코드를 작성할 수 있다 .

최악의 대기 시간 : 태스크 코드 함수 중에서 제일 긴 함수의 수행 시간 + ISR 의 수행 시간 가장 긴 코드가 막 시작 되었을 때 , 우선 순위가 가장 높은 인터럽트가 발생하는

경우 낮은 우선 순위의 태스크 코드가 수행시간이 길다면 , 높은 우선 순위의 함수의

응답시간에 영향을 줄 수 있음 ( 단점 )

낮은 우선 순위의 태스크 코드의 응답성이 나빠질 가능성이 있음 ( 단점 ) 제어가 다소 복잡

Page 12: Chapter 05 임베디드 소프트웨어 구조 살펴보기

12

펑션큐스케줄링 구조 평션큐스케줄링 구조의 예

!! 함수 포인터들의 큐 ;

void interrupt vHandleDeviceA (void)

{

!! I/O 장치 A 에 대해 필요한 것을 처리

!! function_A 에 대한 함수 포인터를 함수 포인터들의 큐에 삽입

}

void interrupt vHandeDeviceB (void)

{

!! I/O 장치 B 에 대해 필요한 일을 처리

!! function_B 에 대한 함수 포인터를 함수 포인터들의 큐에 삽입

}

void main (void)

{

while (TRUE)

{

while (!! 함수 포인터들의 큐가 비어 있다 면 기다림 )

!! 큐에 있는 첫 번째 함수 호출

}

}

void function_A (void)

{

!! 장치 A 에게 필요한 일을 처리

}

void function_B (void)

{

!! 장치 B 에게 필요한 일을 처리

}

Page 13: Chapter 05 임베디드 소프트웨어 구조 살펴보기

13

5.4 RTOS 구조 RTOS 구조의 예

void interrupt vHandleDeviceA (void)

{

!! I/O 장치 A 에 대해 필요한 일을 처리한다

!! 시그널 X 를 설정한다

}

void interrupt vHandleDeviceB (void)

{

!! I/O 장치 B 에 대해 필요한 일을 처리한다

!! 시그널 Y 를 설정한다

}

.

.

.

void Task1 (void)

{

while (TRUE)

{

!! 시그널 X 를 기다린다!! I/O 장치 A 로부터 데이터를

받거나 준다}

}

void Task2 (void)

{

while (TRUE)

{

!! 시그널 Y 를 기다린다!! I/O 장치 B 로부터 데이터를

받거나 준다}

}

Page 14: Chapter 05 임베디드 소프트웨어 구조 살펴보기

14

RTOS(Real-Time Operating System) 와 다른 구조들의 차이점 인터럽트 루틴과 태스크 사이에서 필요한 시그널의 교환은 RTOS 가 처리

( 프로그래머를 위한 편의사항 )

코드 작성자는 다음에 수행 될 함수에 대해서 관여하지 않아도 됨 (프로그래머를 위한 편의사항 )

이 부분은 모두 RTOS 가 알아서 처리해 줌 RTOS 는 다른 서브루틴을 수행하기 위해서 , 현재 처리 중인 서브루틴을

일시 정지 시킬 수 있음 (RTOS 의 본질 )

RTOS 는 ISR 의 응답 우선 순위 뿐만 아니라 , 태스크 코드의 우선 순위도 조정 가능

Page 15: Chapter 05 임베디드 소프트웨어 구조 살펴보기

15

RTOS 구조의 단점 RTOS 구조의 기본적인 단점

RTOS 구입 비용 RTOS 자체가 시스템의 프로세스 시간을 약간 소비

Page 16: Chapter 05 임베디드 소프트웨어 구조 살펴보기

16

RTOS 구조를 위한 우선 순위 레벨

Page 17: Chapter 05 임베디드 소프트웨어 구조 살펴보기

17

다양한 소프트웨어 구조의 특징

소프트웨어 구조 우선 순위 사용 가능 여부

태스크 코드를 위한 최악의 경우 응답 시간

코드를 수정했을 때 응답의 안정성 복잡도

라운드로빈 불가능 모든 태스크 코드의 합 좋지 않음 매우 단순

인터럽트 라운드로빈

우선순위를 갖는 인터럽트 루틴과 , 모두 같은 우선 순위를 갖는 태스크 코드

모든 태스크 코드의 수행 시간 ( 더하기 인터럽트 루틴 수행 시간 )

인터럽트 루틴을 위해서는 좋음 , 태스크 코드를 위해서는 좋지 않음

인터럽트 루틴과 태스크 코드 간의 공유 데이터 문제를 처리해야 함

펑션큐 스케줄링

우선순위를 갖는 인터럽트 루틴과 , 우선순위를 갖는 태스크 코드

가장 긴 함수의 수행 시간 ( 더하기 인터럽트 루틴의 수행 시간 )

상대적으로 좋음공유 데이터 문제를 처리해야 하고 , 함수 큐를 다루는 코드를 작성해야 함

RTOS

우선순위를 갖는 인터럽트 루틴과 , 우선순위를 갖는 태스크 코드

응답 지연 시간이 없음 ( 인터럽트 루틴의 수행시간은 더해야 함 )

매우 좋음가장 복잡한 구조임( 대부분의 복잡한 부분은 운영체제 안에 숨겨져 있다 )

Page 18: Chapter 05 임베디드 소프트웨어 구조 살펴보기

18

5.5 알맞은 소프트웨어 구조의 선택 설계하려는 시스템의 응답 조건에 적절한 시스템 중 가장

간단한 구조를 선택 임베디드 시스템 소프트웨어 작성 자체가 복잡하기 때문에 ,

필요 이상으로 복잡한 구조의 선택은 임베디드 시스템 소프트웨어 작성을 더욱 복잡하게 만듦

만약 설계하려는 시스템이 RTOS 를 사용해야 할 필요가 있는 응답 조건을 가지고 있다면 , RTOS 구조를 사용하는 방향으로 결정을 해야 함 대부분의 상용 RTOS 는 시스템을 테스트 하고 , 디버깅을 쉽게

할 수 있는 유용한 툴들을 같이 제공

필요한 경우 여러 구조들 ( 라운드로빈 , 인터럽트 라운드로빈 , …) 을 혼합한 형태를 만들 수도 있음

Page 19: Chapter 05 임베디드 소프트웨어 구조 살펴보기

19

요약 응답 조건은 소프트웨어 구조를 선택하는데 있어서 가장 중요한 요소이다 .

네 가지 소프트웨어 구조 각각의 특징은 표 5.1 에 나와 있다 .

일반적으로 , 하려는 일에 맞는 가장 간단한 구조를 택하는 것이 좋다 .

RTOS 구조의 장점 중의 하나는 RTOS 를 구입 함으로서 , 직접 코드를 작성하지 않아도 어떤 문제들은 해결을 할 수가 있다는 것이다 .

어떤 시스템은 몇 가지 구조를 같이 사용하는 혼합 구조를 사용할 수도 있다 .