동영상.
1. 설계 과제의 개요
▪ ARM기반의 임베디드 시스템에 대한 실무능력과 설계능력 배양을 위하여, 시스템 설계수업에서 습득한 지식을 바탕으로 ARM core를 내장한 임베디드 시스템 application을 설계, 제작하여 본다. 임베디드 시스템용 하드웨어(target board)에 적절한 실시간 운영체제(RTOS)를 활용한 소프트웨어를 설계해봄으로써 임베디드 시스템 설계에 대한 종합적인 능력을 배양한다.
2. 설계 환경
2.1. Operation System
2.1.1. RTOS
기존의 OS는 멀티태스킹이 시간적 정확성을 보장해주기 힘들기 때문에, 임베디드 시스템에서는Real-Time으로 동작하는 RTOS가 많이 이용된다.
2.1.2. µC/OS-II Kernel Structure
- MicroC/OS-Ⅱ Kernel은 크게 Structure, Synchronization, Inter Task Communication, Memory Management로 나뉘며, 위 그림과 같이 각각의 기능을 담당하고 있다.
2.1.3. Kernel Source
- 실제 포팅을 하기 위해 컴파일하는 코드는 응용프로그램 소프트웨어와 응용 프로그램에 종속적인 코드, 하드웨어에 독립적인 uC/OS-II 코드와 프로세서에 종속적인 코드로 나누어 볼 수 있다.
- 응용 프로그램에 종속적인 코드 : OS_CFG.H, INCLUDE.H
- 프로세서에 종속적인 코드: OS_CORE.C, OS_MBOX.C, OS_MEM.C, OS_Q.C, OS_SEM.C, OS_TASK.C, OS_TIME.C, uC/OS-II.C, uC/OS-II.H => 이들은 scheduler, task, timer등의 관리를 위한 OS의 일부로서 C언어로 작성되었으며 H/W에 관계없이 수행되는 일종의 알고리즘으로 생각할 수 있다.
- 프로세서에 따라 바꾸어 주어야 하는(프로세서에 종속적인) 코드 : OS_CPU.H, OS_CPU_A.ASM, OS_CPU_C.C (여기서 목표시스템에 맞는 기능들을 설정)
- uC/OS-II를 특정 H/W에 따라 포팅하려면, 우선 OS_CPU.H의 #define 상수와 시스템에서 사용할 데이터 타입, 세 개의 #define macro를 정의하여야 한다. OS_CPU_C.C는 태스크가 생성되어 초기화될 때 stack 영역을 설정, 초기화하고 레지스터 영역을 잡는 OSTaskStkInit 함수가 있다. 또 그 외에 전처리를 위한 hook 함수들이 있는데 이 함수들을 구현해야 한다. 그리고 OS_CPU_A.ASM에는 _OSStartHighRdy, _OSCtxSw, _OSIntCtxSw, _OSTickISR 등의 가장 낮은 레벨의 함수들이 어셈블리 언어로 정의 되어 있다. 프로세서에 따라 문맥 교환이나 timer 등을 수정하여야 한다.
- uC/OS-II는 timer를 이용한 context switching을 하므로 microcontroller의 timer가 커다란 부분을 차지한다.
2.1.4. uc/OS-II Task Scheduling, Context Switching
- 멀티태스킹 운영체제에서 태스크 스케줄링은 가장 기본적이면서도 중요한 기능이라고 할 수 있다. 태스크 스케줄링은 여러 태스크가 관리되고, 실행되는 방법을 결정한다. uC/OS-II에서는 운선 순위에 기반한 태스크 스케줄링 방법을 사용한다.
- 각각의 태스크는 0에서 OS_LOWEST_PRIO 까지의 유일한 우선 순위 을 가진다. 유일하다는 의미는 두 개 이상의 태스크가 동일한 우선 순위를 가질 수 없음을 의미한다. uC/OS-II에서는 64개의 태스크를 가질수 있다. 이중에서 OS_LOWEST_TASKS는 Idle 태스크를 위한 우선 순위이다.
- uC/OS-II 에서는 태스크 스케줄링을 위해 두 개의 중요한 변수를 두고 있는데, 하나는 OSRdyGrp이고, 다른 하나는 OSRdyTb1[]이다. 64개의 태스크는 8개씩 묶여져 8개의 그룹으로 나누어지며, 각각의 그룹은 OSRdyGrp에서의 각각의 비트로 매핑된다. 즉, 그룹 내의 태스크가 READY 상태에 있다면, 해당 그룹에 매핑된 OSRdyGrp의 비트는 1로 설정된다. OSRdyTb[]은 그룹 내에서의 8개의 태스크를 가리킨다. 따라서 uc/OS-II에서는 태스크 스케줄링이 필요할 때, 먼저 OSRdyGrp를 통해, 가장 READY 상태의 가장 높은 우선 순위를 가지는 태스크가 속한 그룹을 찾고, OSRdyTb1[]을 통해, 가장 높은 우선 순위의 태스크를 찾게 된다.
3. 프로젝트 구조
◎ 우선순위 결정
입력버튼에 따라 App_Task_In에서 posting이 발생하고 이를 App_Task_Cal에서 pending하여 입력된 결과를 연산 처리한다. 이때 pending이 데드락에 빠지지않고 이루어지기 위하여 App_Task_In의 우선순위를 가장 낮게 주었다. 또한 App_Task_Cal의 연산결과가 posting되어 App_Task_Lcd에서 pending하여 이를 화면으로 출력한다. 동일한 원리로 LCD의 우선순위가 0순위, 다음으로 연산 Task이고 마지막으로 입출력 Task로 우선순위를 선정하였다.
5. 설계 대상 시스템의 소개 및 구현
5.1. 프로그램 주제
퀴즈 게임 이란?
미리 입력해놓은 퀴즈 세트를 LCD 에 각각 출력하여, 두 명의 사용자들이 YES, NO를 버튼을 통해 선택, 답을 맞춰서 최종적으로 많은 문제를 맞춘 사용자가 이기는 게임이다. 이를 위해 LCD 두 개에 각각 같은 문제를 출력하고, LED를 통해 정답을 맞춘 사용자가 누구인지 알 수 있도록 구현했다.
5.2. 설계 구현
1) 미리 2+3=4 와 같은 문제들을 저장시켜놓는다. 게임이 시작되면 문제가 LCD 2개에 출력된다.
2) 두 명의 사용자들은 YES, NO 버튼을 통해서 답을 입력한다.
3) 먼저 답을 입력한 사용자가 점수를 얻고, 문제세트가 끝날 때까지 진행된다.
4) 세 개의 상태 LED를 통해 어느 쪽이 문제를 맞추었는지 알 수 있다.
6. 구현 기능 및 내용
6.1. LCD => LCD-16-2LINE(BACKLIGHT)
- 1개의 칩에 CG(Character Generator) ROM, CG RAM, DD(Display Data) RAM등을 내장한 LCD 컨트롤러 및 드라이버 LSI사용
- 내부 제어 명령이 표준화 되어 있음
- 일반적인 영문 ASCII 문자를 모두 표시
- 문자를 표시할 때 자동으로 커서의 위치가 증가 (설정가능)
'컴퓨터 공학 자료(학부) > LAN card design ' 카테고리의 다른 글
(3-2학기 실험) arm7 을 이용한 랜카드 설계와 firmware porting, 어플리케이션 통신 실험 (1) | 2011.02.01 |
---|