3. 1. 팀원
SUM Project Team
201001587 서동현
계산기 알고리즘 작성
디바이스 드라이버 총괄 통합
계산기 알고리즘과 디바이스 드라이버 통합
201001637 전지성
CLCD 연구 및 테스트
Key Button 연구 및 테스트
201001647 지강일
Dot Matrix 연구 및 테스트
Button 연구 및 테스트
201001653 최보영
FND 연구 및 테스트
LED 연구 및 테스트
6. 3. 기간 및 목표
2014. 5. 23. ~ 2014. 6. 13. (약 3주)
1주차 설계 및 디바이스 드라이버 코드 분석 5/23, 5/27, 5/28, 5/30
2주차
계산기 알고리즘 작성 및 디바이스 드라이버 코드 수
정
6/2, 6/3, 6/5
3주차 계산기 알고리즘과 디바이스 드라이버 코드를 통합 6/9, 6/10, 6/11
8. 4. 개발 방향
ListBaseStack : 스택의 활용 부분
InfixToPostfix: 후위 표기법의 수식으로 변환
PostCalculator : 후위 표기법의 수식을 계산
InfixCalculaotr: 중위 표기법의 수식을 계산
Calculator : 계산기 알고리즘의 응용 부분
HisOpen, HisSave,
HisNum : 계산기의 히스토리 부분
계산기 알고리즘
Clcd
fnd
Key button
Dot
Led
btn
디바이스 드라이버
9. 5. 발생한 문제점 및 해결 방안
History 기능 struct history{
int id;
char exp[E_MAX_N];
char res[R_MAX_N];
};
if((fread(&record,sizeof(record),1,fp)>0)&&(record.id!=0))
구조체
파일 포인터
History.txt
1 128+(10+28) 166.0
2 30+50/10 35.0
3 99+1-50*10 -400.0
4 4/4*4/4 1
10. 5. 발생한 문제점 및 해결 방안
소수점 + 한 자리 숫자 이상의 계산
double EvalRPNExp(char exp[LEN]){
·
·
else if(flag_d==1&&flag_dot!=1){
Double digit=SPop(&stack);
SPush(&stack,(digit*10)+tok-
'0');
}
else if(flag_d==1&&flag_dot==1){
double digit=SPop(&stack);
double dot=tok-'0';
for(j=0;j<cnt_dot;j++){
dot/=10;
}
SPush(&stack,digit+dot);
}
11. 5. 발생한 문제점 및 해결 방안
CLCD 두 줄 따로 출력하기
static void string_out(char*str){
·
·
if(*s=='n'){
udelay(100);
*((volatileunsignedchar*)(mem_base_wr))=0xC0;
continue;
}
12. 5. 발생한 문제점 및 해결 방안
Button과 Key Button의 충돌
int main(int ac,char *av[]){
·
·
/* Init Thread */
pthread_mutex_init(&mutx,NULL);
pthread_create(&t_id,NULL,handle_btn,
(void*)&btnFd);
·
·
void * handle_btn(void *arg){
switch(buf){
/* Exit Key */
case1:
pthread_mutex_lock(&mutx);
btn_flag[0]=1;
pthread_mutex_unlock(&mutx);
break;