임베디드 시스템 설계 프로젝트 “EMPOS-II를 활용한 영어단어 학습기”
003분반
20조
(12101387 김대기 && 12081045 이재혁)
목차
• 프로그램 개발 동기 & 목적
• 팀원 소개 & 역할 분담
• 프로그램의 주요 기능 소개
• 구체적인 프로그램 설명
• 프로그램 시연
• 결론 및 향후 발전 가능성 제시
• 질의 응답
프로그램 개발 동기 & 목적 (1/2)
• EMPOS-II 보드를 이용해 영어 단어를 학습할 수 있는 환경을 구현하는 것이 우리 프로젝트의 목표!
• 3가지 이상의 EMPOS-II 디바이스를 이용하면서 실생활에 유용한 어플리케이션을 개발하는데 해당 주제가 적합하다고 판단.
프로그램 개발 동기 & 목적 (2/2) • 1)Text LCD, 2)Push-Down button, 3)7-Segment LCD,
4)LED 등 EMPOS-II 보드의 4가지 디바이스를 활용해 영어 단어 학습기를 구현하기로 함!
• 디바이스 드라이버 작성과 Memory Map 등 수업시간에 배운 내용으로 각 디바이스를 활용!
팀원 소개 & 역할 분담
• 이재혁 •디바이스 드라이버, 디버깅 및 코드 최적화
• 김대기 •프로그램 디자인, 어플리케이션 개발, 문서 작업
프로그램 주요 기능 소개 (1/4)
'This' is a vehicle with wings and one or more engines that enable it to fly through the air.
1) Text LCD를 통해 문제 및 보기 출제
1) Taxi 2) Bus 3) Ship 4) Subway 5) Airplane
프로그램 주요 기능 소개 (2/4)
1) Taxi 2) Bus 3) Ship 4) Subway 5) Airplane
2) push-down button을 통해 정답 입력
1 2 3 4 5 x x x
1~5번 까지의 button만을 이용
프로그램 주요 기능 소개 (3/4)
3) 맞혔거나 틀렸을 경우 LED 반짝임
맞혔을 경우 틀렸을 경우
시간
프로그램 주요 기능 소개 (4/4)
4) 지금까지 맞힌 개수를 7 Segment에 표시
구체적인 프로그램 설명 (1/9)
• 각 디바이스 컨트롤 방법
디바이스 컨트롤 방법
Text LCD Mmap
LED Mmap
7 Segment Device Driver
Push-down Button Device Driver
구체적인 프로그램 설명 (2/9)
프로그램 flow chart
구체적인 프로그램 설명 (3/9)
• 영어 단어 문제를 관리하기 위해 구조체 배열 이용.
• 구조체를 이용하면 ‘문제, 보기, 정답을 한 묶음’으로 처리할 수 있고 배열로 선언할 수 있어 편리하다. (순수한 C이기 때문에 클래스 사용 불가!)
struct struct_problem { char *problem; //문제 char *example; //보기 int correct; //정답 };
struct struct_problem problems[NUMBER_OF_PROBLEM];
구체적인 프로그램 설명 (4/9) • 문제 데이터를 파일에서 불러오기.
void make_problems() { FILE *file = fopen("problems","r"); //파일 오픈 char line[512]; int i,j,len; for(i=0; i<NUMBER_OF_PROBLEM; i++) { for(j=0; j<3; j++) { fgets(line,sizeof(line),file); //파일에서 한 줄씩 READ len = strlen(line); switch(j) { case 0: problems[i].problem = (char *)malloc(len); strcpy(problems[i].problem, line); break; case 1: … case 2: … } } } }
구체적인 프로그램 설명 (5/9)
• Text LCD는 한번에 최대 40문자(20 x 2)까지 표현할 수 있다.
• 영어 문제는 보통 40문자를 초과함.
• EX) 'This' is minced meat which has been shaped into
a flat circle. 63 문자, Overflow!!
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
구체적인 프로그램 설명 (6/9)
• 해결하기 위해서는? 문제를 나눠서 보여주기!
‘ T h i s ‘ i s m i n c e d m e a
t w h i c h h a s b e e n s h a
p e d i n t o a f l a t c i r c
l e ,
언제 다음 화면을 보여줄 것인가? 일정한 시간을 기준으로? 유저가 원할 때!
구체적인 프로그램 설명 (7/9)
‘ T h i s ‘ i s m i n c e d m e a
t w h i c h h a s b e e n s h a
p e d i n t o a f l a t c i r c
l e ,
push-down button중 하나를 누르면 다음 화면을 보여줌.
1 2 3 4 5 x x x
구체적인 프로그램 설명 (8/9)
함수명 기능
void make_problems() 파일에 저장되어있는 데이터를 읽어 문제를 구성함
void usrsignal(int sig) 푸시다운버튼 시그널 핸들러
int get_pushbutton() 푸시다운버튼 입력을 기다리고 유저가 입력한 버튼 번호를 리턴
int print_question(struct struct_problem p)
인자로 받은 구조체를 이용해 문제와 보기를 출력하고 유저의 입력을 기다린 후 정답=0, 오답= -1 리턴
void good(int count) 문제를 맞췄을 경우 LED 반짝거림, count 만큼 반복
void bad(int count) 문제를 틀렸을 경우 LED 반짝거림, count 만큼 반복
• 유저 어플리케이션의 주요 함수
구체적인 프로그램 설명 (9/9)
• main 함수 주요 부분
make_problems(); //파일에 저장되어있는 데이터를 읽어 문제를 구성함 for(i=0; i<NUMBER_OF_PROBLEM; i++) { //문제의 개수 만큼 반복 //문제 및 보기를 출제하고 리턴 값 검사 if((ret = print_question(problems[i]))==0) { //맞혔을 경우 good(5); USER_SCORE++; ioctl(dev_segm,SEGMENT_WRITE_FIRST,&USER_SCORE,4); } else { //틀렸을 경우 bad(5); } }
개발 및 테스트 환경
분류 내용
Target Device HBE-EMPOS-II
Host OS Fedora
Cross-Compiler arm-linux-gcc
Text Editor gedit
프로그램 시연
결론 및 향후 발전 가능성 제시 (1/2)
• 실습실을 이용할 수 있는 시간이 한정되어 있기 때문에 주어진 시간 내에서 충분히 해결할 수 있는 주제를 선택했다고 판단.
• 기존 실습시간에 만들었던 디바이스 드라이버와 mmap 사용법 등을 적극 활용해 프로젝트를 완성.
• 키보드나 마우스를 통해 입력을 하고 모니터를 통해 프로그램 출력을 확인하던 다른 수업의 프로젝트와 달리 다양한 장치를 활용해 입/출력 할 수 있었던 점이 가장 흥미로웠음.
결론 및 향후 발전 가능성 제시 (2/2)
• Text LCD 특성상 한글을 표현할 수 없고 그래픽 적으로 제한이 많기 때문에 TFT LCD와 터치스크린을 이용한다면 더욱 유용한 어플리케이션을 개발할 수 있을 것.
• 유저의 정보를 데이터베이스화 하여 관리한다면 유저 레벨에 맞는 문제를 출제하거나 중복된 문제를 출제하는 것을 방지할 수 있을 것.
Any Question?
TNX,