작업 환경
-메인 OS : Windows 8.1K(Intel Core i5-4590)
-작업 OS : Ubuntu 14.04.5 LTS 64bit(VirtualBox)
-장 비 명 : Hybus-Smart4412
stream.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"
#define dot "/dev/dot"
void menu();
void streaming();
int main()
{
int tact, i = 0;
unsigned char c;
tact = open(tact_d, O_RDWR);
if(tact<0)
{
printf("open failed\n");
}
while(1)
{
menu();
while(1)
{
read(tact, &c, sizeof(unsigned char));
usleep(100000);
if(c) break;
}
switch(c)
{
case 1:streaming();break;
case 12:printf("Shutdown!\n");return;
}
}
close(tact);
return 0;
}
void menu() //tact 선택 목록
{
puts("*********Dot Dot Menu*********");
puts("* 1. S T R E A M *");
puts("* 12. E X I T *");
puts("******************************");
}
void streaming()
{
int dot_d, i, j, k;
unsigned char tmp[16][8]={0};
unsigned char num[15][8]=
{
{0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x00}, //C
{0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00}, //H
{0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, //O
{0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00}, //I
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0
{0x1E, 0x0C, 0x0C, 0x0C, 0x6C, 0x6C, 0x38, 0x00}, //J
{0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, //O
{0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, //O
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0
{0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C, 0x00}, //S
{0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x7E, 0x00}, //E
{0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, //O
{0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66, 0x00}, //K
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0
};
dot_d = open(dot, O_RDWR);
for(k=7; k>0; k--)
{
for(j=0; j<9; j++)
tmp[0][j]=num[0][j]>>k;
write(dot_d, &tmp[0], sizeof(tmp[0]));
usleep(80000);
}
for(i=1; i<15; i++)
{
for(k=0; k<7; k++){
for(j=0; j<9; j++){
tmp[i][j]=num[i-1][j]<<k;
tmp[i][j]|=num[i][j]>>6-k;
}
write(dot_d, &tmp[i], sizeof(tmp[i]));
usleep(80000);
}
}
for(k=0; k<7; k++)
{
for(j=0; j<9; j++){
tmp[i][j]=num[i-1][j]<<k;
}
write(dot_d, &tmp[i-1], sizeof(tmp[i]));
usleep(80000);
}
close(dot_d);
}
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 stream.c -o stream
3. Test
- 윈도우(메인 OS)로 실행파일 복사
- Tera Term에서 포트 설정 후 설정 -> 시리얼 포트 -> 속도를 115200으로 설정
- Hybus-Smart4412 장비 부팅
- 메뉴 -> 전송 -> ZMODEM -> 보내기 에서 실행파일 선택
- chmod 777 [실행파일명] (실행파일 권한 설정)
- ./[실행파일명] (실행 후 테스트)
(★중요 : 만약 소스파일을 수정 했다면 Tera Term 에서 먼저 rm [실행파일명] 을 한 뒤 다시 ZMODEM -> 보내기 에서 실행파일 선택 후 chmod 777 [실행파일명] 와 ./[실행파일명] 다시 실행)
'Embedded > Kernel Porting' 카테고리의 다른 글
[Kernel Porting] 커널포팅 최종실습-2 (0) | 2016.12.26 |
---|---|
[Kernel Porting] 커널포팅 최종실습-1 (0) | 2016.12.21 |
[Kernel Porting] Dip스위치와 Dot matrix를 이용하여 다양하게 점멸해보기 (0) | 2016.12.19 |
[Kernel Porting] Dot matrix 표정다른 스마일 2초반복 (0) | 2016.12.19 |
[Kernel Porting] Dot matrix 슬픈 스마일 그려보기 (0) | 2016.12.19 |