230 likes | 463 Views
임베디드시스템. 2012 년도 가을학기. 담당교수. 조장우 , 동아대학교 컴퓨터공학과 , SF 619 호 e-mail: jwjo@dau.ac.kr www: http://web.donga.ac.kr/jwjo phone: 200-7780. 성적평가. 중간 시험 : 30% 기말 시험 : 30% 실험 보고서 : 20% 설계 과제 : 10% 출 석 : 10%. 교재. PXA270 을 이용한 임베디드 시스템구조 및 응용 , 상학당
E N D
임베디드시스템 2012년도 가을학기
담당교수 • 조장우, 동아대학교 컴퓨터공학과, SF619호 • e-mail: jwjo@dau.ac.kr • www: http://web.donga.ac.kr/jwjo • phone: 200-7780
성적평가 • 중간 시험: 30% • 기말 시험: 30% • 실험 보고서: 20% • 설계 과제: 10% • 출 석: 10%
교재 • PXA270을 이용한 임베디드 시스템구조 및 응용, 상학당 • X-Hyper270TKU 실습교재, 하이버스 • 입문자를 위한 임베디드시스템, 사이텍미디어 • 재미있는 임베디드시스템 디자인, CMPBooks • RTOS를 이용한 실시간 임베디드 시스템 디자인, 에이콘 • 임베디드시스템을 위한 RTOS, 에이콘 • …
임베디드시스템이란? • 특정한 기능을수행하기 위하여 결합된 컴퓨터 시스템 • HW 로 구현한 기능과 비교 • Computers Inside a Product (or a System) • 다양한 목적으로 사용되는 PC와 달리, 한 가지 또는 몇 가지 특수한 작업을 수행 • PDA와 같이 Embedded System에서도 점차 범용성을 띄어 가고 있다
임베디드 시스템 구현 방법 • 하드웨어구현 VS. 소프트웨어구현 • 부동소수점연산(80386과 이전의 프로세서) • 모뎀, 랜카드 • 프린터 • 네트워크 기능이 추가되면? • 논리곱(Logical and) • SW: bool a, b, c; c = a && b; • HW: AND gate
소프트웨어의 장점 • 일반적으로 소프트웨어 개발에서는 개발 도구를 염가로 갖출 수 있음 • 같은 CPU 보드라도 소프트웨어를 바꿔 넣음으로써 다른 처리를 하게 할 수 있고 메모리의 용량에 빈 곳이 있으면, 기능을 추가할 수도 있음 • 프로그램에 문제(버그)가 발견되면 즉석에서 수정할 수 있음
하드웨어의 단점 • ASIC 등의 하드웨어 개발에서는 일반적으로 고가의 개발 도구를 필요로 함 • 개발에는 큰 투자와 시간이 필요 • 또 다른 처리를 하게 하거나 기능을 추가하려면, 그로 인한 회로가 필요 • 또 회로에 잘못이 발견되었을 때에 그것을 수정하기 위해서는 많은 수고와 비용요구
소프트웨어의 단점 • 소프트웨어를 동작시키려면 “CPU+메모리”가 필요 • 그러나 일부러 ASIC를 개발하는 것보다는 훨씬 싼 가격으로 CPU 보드를 실현할 수 있음 • 하드웨어만으로 처리하는 경우와 소프트웨어로 처리하는 경우를 비교하면, 일반적으로는 하드웨어로 처리하는 쪽이 고속임 • 사람이 버튼을 눌러 LED를 점등 시키는 것과 같은 그다지 고속이 아닌 처리는 소프트웨어로도 충분히 처리할 수 있지만 • ns급의 성능이 요구되는 처리는 하드웨어로 처리해야 함 • 소프트웨어에서의 처리 성능을 높이기 위해서는 한층 고속의 CPU를 사용해야 함 • 그러나 고성능의 CPU는 가격도 비싸고 • 그것이 제품 가격에 반영되므로 어느 정도 성능의 CPU를 채용해야 하는가 하는 것은 사실 매우 중요한 문제임
임베디드 시스템의 구성 • 임베디드 시스템 구성 • 임베디드 H/W • 프로세서/컨트롤러, 메모리, I/O 장치, 네트워크 장치, 센서, 구동기 • 임베디드 S/W • 운영체제, 시스템 S/W, 응용 S/W H/W S/W Micro Processor OS - Kernel Memory 시스템 소프트웨어 입출력 장치 응용 소프트웨어 네트워크 장치 임베디드 시스템
범용컴퓨터와 비교 • 임베디드 • 마이크로 프로세서의 성능? • 전체 제품의 일부 • 특정 기능 수행 • 필요한 주변장치 • 사용자의 개입 없이 동작 • 범용컴퓨터 • 마이크로 프로세서 • 제품 자체 • 범용 기능 수행 • 필요할 수 있는 주변장치 • 사용자와 대화형으로 동작
Where Are the Processors? Where Has CS Focused? Direct2% InteractiveComputers Robots6% Vehicles12% 200Mper Year 8.5B Parts per Year Servers,etc. Embedded Computers 80% In Vehicles In Robots Embedded 프로세서 Source: DARPA/Intel (Tennenhouse)
임베디드 소프트웨어 구조 입문자를 위한 임베디드시스템5 장
라운드 로빈 구조의 예 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에 넘겨주거나 가져온다. } } } What is the worst wait?
인터럽트 라운드로빈 구조의 예 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; }
인터럽트 라운드로빈 구조의 예 (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로 데이터를 넘겨 주거나 가져 온다 } } } What is the worst wait?
펑션큐스케줄링 구조의 예 !! 함수 포인터들의 큐; 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 에게 필요한 일을 처리 } What is the worst wait?
5.4 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로부터 데이터를 받거나 준다 } }
The Shared-Data Problem 입문자를 위한 임베디드시스템4.3
Classic shared-data problem static int iTemperature[2]; void interrupt vReadTemperatures (void) { iTemperatures[0] = !! 하드웨어로부터 값을 읽음 iTemperatures[1] = !! 하드웨어로부터 값을 읽음 } void main (void) { int iTemp0, iTemp1; while (TRUE) { iTemp0 = iTemperatures[0]; iTemp1 = iTemperatures[1]; if (iTemp0 != iTemp1) !! 비상 경보를 울린다; } }
Classic shared-data problem static int iTemperature[2]; void main (void) { int iTemp0, iTemp1; while (TRUE) { // iTemp0 = iTemperatures[0]; // iTemp1 = iTemperatures[1]; // if (iTemp0 != iTemp1) if (iTemperatures[0] != iTemperatures[1]) !! 비상 경보를 울린다; } }
Classic shared-data problem static int iTemperature[2]; void main (void) { int iTemp0, iTemp1; while (TRUE) { iTemp0 = iTemperatures[0]; iTemp1 = iTemperatures[1]; if (iTemp0 != iTemp1) !! 비상 경보를 울린다; } }
Classic shared-data problem static int iTemperature[2]; void main (void) { int iTemp0, iTemp1; while (TRUE) { disable(); iTemp0 = iTemperatures[0]; iTemp1 = iTemperatures[1]; enable(); if (iTemp0 != iTemp1) !! 비상 경보를 울린다; } }