작업 환경
-메인 OS : Windows 8.1K(Intel Core i5-4590)
-작업 OS : Ubuntu 14.04.5 LTS 64bit(VirtualBox)
-장 비 명 : Hybus-Smart4412
led_test.c
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<sys/types.h>
#include<sys/ioctl.h>
#include<sys/stat.h>
//디바이스 드라이버가 들어있는 경로 위치를 적어논것
#define led "/dev/led"
void LedUp(int dev);
void LedDown(int dev);
void LedAll(int dev);
void LedOddEven(int dev);
void LedInside(int dev);
void LedOutside(int dev);
int main()
{
int dev , i , num;
unsigned char data;
//1. 해당 드라이버 경로
//2. O_RDWR
dev = open(led,O_RDWR);
if(dev <0)
{
printf("열수 없습니다.\n");
exit(0);
}
while(1)
{
puts("**********JooSeok Menu**********");
puts("* 1. LED UP Shift *");
puts("* 2. LED DOWN Shift *");
puts("* 3. A L L *");
puts("* 4. O D D _ E V E N *");
puts("* 5. I N S I D E *");
puts("* 6. O U T S I D E *");
puts("* 0. E X I T *");
puts("********************************");
fputs("Select the menu number : " , stdout);
scanf("%d" , &num);
switch(num)
{
case 1:
LedUp(dev);
break;
case 2:
LedDown(dev);
break;
case 3:
LedAll(dev);
break;
case 4:
LedOddEven(dev);
break;
case 5:
LedInside(dev);
break;
case 6:
LedOutside(dev);
break;
case 0:
close(dev);
return 0;
}
putchar('\n');
}
return 0;
}
void LedUp(int dev)
{
int i;
unsigned char data;
for(i=1 ; i<9 ; ++i)
{
data = 0xff<<i;
usleep(100000);
//1. 파일의 디스크립트
//2. 데이터 전달
//3. 크기를 넣어준다.
write(dev , &data , sizeof(unsigned char));
usleep(100000);
}
}
void LedDown(int dev)
{
int i;
unsigned char data;
for(i=1 ; i<9 ; ++i)
{
data = 0xff>>i;
usleep(100000);
//1. 파일의 디스크립트
//2. 데이터 전달
//3. 크기를 넣어준다.
write(dev , &data , sizeof(unsigned char));
usleep(100000);
}
}
void LedAll(int dev)
{
int i;
unsigned char data;
for(i=1 ; i<15 ; ++i)
{
if(i%2 == 1)
{
data = 0x00; // led 켜짐
}
else
{
data = 0xff;
}
//1. 파일의 디스크립트
//2. 데이터 전달
//3. 크기를 넣어준다.
write(dev , &data , sizeof(unsigned char));
usleep(100000);
}
}
void LedOddEven(int dev)
{
int i , j;
unsigned char data;
for(i=1 ; i<15 ; ++i)
{
if(i%2 == 1)
{
data = 0x55;
}
else
{ data = 0xAA;
}
usleep(100000);
write(dev , &data , sizeof(unsigned char));
usleep(100000);
}
}
void LedInside(int dev)
{
int i;
unsigned char data;
for(i=1 ; i<5 ; ++i)
{
data = (0xFF>>i) & (0xFF<<i);
usleep(100000);
write(dev , &data , sizeof(unsigned char));
usleep(100000);
}
}
void LedOutside(int dev)
{
int i;
unsigned char data;
for(i=4 ; i>=0 ; --i)
{
data = ~((0xFF>>i) & (0xFF<<i));
usleep(100000);
write(dev , &data , sizeof(unsigned char));
usleep(100000);
}
}
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 led_test.c -o led_test
3. Test
- 윈도우(메인 OS)로 실행파일 복사
- Tera Term에서 포트 설정 후 설정 -> 시리얼 포트 -> 속도를 115200으로 설정
- Hybus-Smart4412 장비 부팅
- 메뉴 -> 전송 -> ZMODEM -> 보내기 에서 실행파일 선택
- chmod 777 [실행파일명] (실행파일 권한 설정)
- ./[실행파일명] (실행 후 테스트)
(★중요 : 만약 소스파일을 수정 했다면 Tera Term 에서 먼저 rm [실행파일명] 을 한 뒤 다시 ZMODEM -> 보내기 에서 실행파일 선택 후 chmod 777 [실행파일명] 와 ./[실행파일명] 다시 실행)
'Embedded > Kernel Porting' 카테고리의 다른 글
[Kernel Porting] Tact 스위치를 이용한 응용문제 (0) | 2016.12.18 |
---|---|
[Kernel Porting] Tact 스위치를 이용한 사칙연산 (0) | 2016.12.18 |
[Kernel Porting] LED 점멸하기1 (0) | 2016.12.18 |
[Kernel Porting] Hello World 출력하기 (0) | 2016.12.18 |
[Kernel Porting] Embedded Programming 컴파일 및 테스트 (0) | 2016.12.17 |