본문 바로가기

Embedded/Kernel Porting

[Kernel Porting] Tact 스위치를 이용한 사칙연산

작업 환경

-메인 OS : Windows 8.1K(Intel Core i5-4590)

-작업 OS : Ubuntu 14.04.5 LTS 64bit(VirtualBox)

-장 비 명 : Hybus-Smart4412


tactsw.c

#include<termios.h>

#include<stdio.h>

#include<stdlib.h>

#include<fcntl.h>

#include<unistd.h>

#include<string.h>

#include<sys/types.h>

#include<asm/ioctls.h>


#define tact_d "/dev/tactsw"


void calc(int *num , char op , int *i);


int main()

{

int tact , sum=0 , i=0;

char op;

int num[2];

unsigned char c;

tact = open(tact_d , O_RDWR);

if(tact < 0)

{

printf("open failed!\n");

}

while(1)

{

while(1)

{

read(tact , &c , sizeof(c)); //scanf() 처럼 블록상태가 되지 않기 때문에

usleep(100000);

if(c) break;

}

switch(c)

{

case 1: printf("%d입력\n" , c);num[i]=1;i++; break; 

case 2: printf("%d입력\n" , c);num[i]=2;i++; break; 

case 3: printf("%d입력\n" , c);num[i]=3;i++; break; 

case 4: printf("%d입력\n" , c);num[i]=4;i++; break; 

case 5: printf("%d입력\n" , c);num[i]=5;i++; break; 

case 6: printf("%d입력\n" , c);num[i]=6;i++; break; 

case 7: op='+';printf("%c입력\n" , op);break; 

case 8: op='-';printf("%c입력\n" , op);break; 

case 9: op='*';printf("%c입력\n" , op);break; 

case 10: op='/';printf("%c입력\n" , op);break; 

case 11: calc(num , op , &i); break; 

case 12: printf("Shutdown!\n"); return;


}

}

return 0;

}


void calc(int *num , char op , int *i)

{

switch(op)

{

case '+':printf("Sum : %d\n" , num[0]+num[1]);break;

case '-':printf("Min : %d\n" , num[0]-num[1]);break;

case '*':printf("Mul : %d\n" , num[0]*num[1]);break;

case '/':printf("Div : %d\n" , num[0]/num[1]);break;

}

*i = 0;

}



1. 초기설정

sudo apt-get install gcc-4.4 g++-4.4 g++-4.4-multilib gcc-4.4-multilib lib32z1


2. 컴파일

/opt/gnueabi/opt/ext-toolchain/bin/arm-linux-gnueabihf-gcc tactsw.c -o tactsw


3. Test

- 윈도우(메인 OS)로 실행파일 복사

- Tera Term에서 포트 설정 후  설정 -> 시리얼 포트 -> 속도를 115200으로 설정

- Hybus-Smart4412 장비 부팅

- 메뉴 -> 전송 -> ZMODEM -> 보내기 에서 실행파일 선택

- chmod 777 [실행파일명]  (실행파일 권한 설정)

- ./[실행파일명]  (실행 후 테스트)

(★중요 : 만약 소스파일을 수정 했다면 Tera Term 에서 먼저 rm [실행파일명] 을 한 뒤 다시 ZMODEM -> 보내기 에서 실행파일 선택 후 chmod 777 [실행파일명] 와 ./[실행파일명] 다시 실행)