본문 바로가기
코스웨어/11년 내장형하드웨어

[내장형]한원우_10월14일 실습보고서

by 알 수 없는 사용자 2011. 10. 16.
728x90
반응형

네트워크는 Big endian. 비트맵은 Little endian으로 메모리에 저장

비트맵은 가로 픽셀은 4의 배수로 저장된다.

17픽셀의 그림을 표현하게 되면 4의 배수로 표현해야 되므로 3만큼 쓸모 없는 픽셀이 붙게 된다.

이런 식으로 픽셀이 맞지 않게 되면 그림이 정상 출력 되지 않고 대각선으로 그림이 출력된다.

 

점은 좌우가 없다. 점은 점일뿐이다. 점은 거꾸로 저장된다.

 

이미지를 90도 회전하는 것은 X, Y 좌표만  바꿔주면 되는 간단한 일이지만, 만약 이미지를 15도회전

하려고 한다면, 우리와 친숙하지만 깊게 알고 싶지 않은 π(파이, 먹는 파이 아니랍니다.)와 sin, cos을

사용해야 하는 결코 쉽지만은 아닌 일이 된다.

 

한 예로,, 핸드폰의 외장시계에 명품시계 이미지를 디지털로 표현하려고 할 때 부족한 메모리의 부담이

가지 않게 하기 위해 미러링이라는 기술을 사용하여야 한다는 훈훈한 이야기가 전해진다.

 

Linux Serial Port Programming

Parallel

- 한번에 수bit씩 데이터를 송수신

Serial

- 1Bit씩 전송

Serial도 반드시 1Bit씩 보내지 않는다. 이선식, 삼선식이 존재하기 때문.

 

음료수를 빨대로 먹는다고 생각하고 빨대를 하나 꽂아 먹는 것과 여러 개를 꽂아 먹는 것은 사람의

입 구조와 입 크기.. 폐활량 등의 영향을 받겠지만 기본적으로 빨대가 많으면 그만큼 받아 많은 양을

빨대로 통해 입으로 음료를 전송할 수 있다. 그것이 바로 Parallel.

 

하지만 커다란 입으로 빨대 하나만을 이용하여 음료를 먹게 되면 그만큼 입으로 보내지는 음료의 양도

작을 것이다. 그것이 Serial이다.

 

우리가 배워야 할 Serial은 이선식이다. 그라운드나 Vcc관련된 선은 보지 않는다. 송신선과 수신선이

존재한다. 어떻게 보면 송수신을 동시에 하므로 1Bit씩 전송한다고는 할 수 없는 것이다.

속도는 느리지만 케이블이 단순하다.

 

USB는 고속 시리얼.

 

Linux의 Serial 접근

리눅스에서 다음과 같은 명령을 쳐보자.

ls –al /dev/ttyS0

ll(LL)을 쳐도 된다. ll은 alias.

alias [éiliəs] n. 변명, 가명, 통칭, 별명.

alias를 해주지 않으면 ll(LL)명령이 먹지 않는다.

 

* crw-rw----에서 c는 char device를 뜻하며 문자 기반 장치이다.

  - char device는 한번에 1byte씩 전송한다.

리눅스에서는 장치를 노란색으로 표시된다. 잠시 디렉토리를 살펴보면

/dev폴더는 device를 뜻하며 장치가 대부분 여기 들어가 있다. 혹시 원한 관계에 있거나 복수를 해야

할 사람이 있다면 집에 가서 이 디렉토리의 내용을 지우면 복수 Success.

이 디렉토리에서 ll을 치게 되면

장치들이 쭉~ 나오게 된다. 이 폴더에 있는 장치들의 제어가 가능하다.

한번에 1byte씩 전송.

- Linux의 장치 제어용 디렉터리

- Linux의 장치를 파일로 간주

brw-rw----에서 b는 block device를 뜻하며 블록 기반 장치이다.(유닛계열)

- block device는 단위를 지정,즉 특정단위를 가지고 전송한다.

◎Linux Serial 통신

○통신 방식

1.Parallel

- 한번에 수비트씩 데이터를 송수신

- 전송속도가 빠르나 케이블이 굵음

- 주로 프린터와의 접속에 이용

- 구현하기 히들고 고가

- 거리에 제한적임

2.Serial

-1bit씩 데이터 송수신

-전송 속도가 느리지만 케이블이 단순

-구현하기 쉽고 저가

-거리 제한을 덜 받음

※ARM과 하이퍼터미널 간의 시리얼은 2선식이다.(송신,수신)

※USB는 고속 Serial이다.

○Linux의 Serial 접근

1. /dev 디렉터리

2.Serial 포트 번호와 장치명

-COM1 : /dev/ttyS0

-COM2 : /dev/ttyS1

○struct termios

-terminal input output이다.

-terminal은 우리말로 종단이라는 뜻이다.

-POSIX가 지정한 표준 인터페이스다. P와 X를 빼면 OSI이다.

-터미널을 제어하기 위한 모드

  ~입력

  ~출력

  ~제어

  ~제어

  ~로컬

  ~특수 제어 문자

-c_cc: 제어 문자 배열

-c_line : POSIX 호환 시스템에서 사용되지 않는다.

○Serial 통신 프로그래밍 기법

1.Canoical

-터미널의 기본 처리 방법

-한 줄 단위로 통신

=NL(New Line,ASCII는 LF) – 디폴트

=EOF(End of File)

=EOL(End of Line)에 의해 종료되는 문자열

-CR(Carriage Return)

=종료 문자로 인식되지 않음

=NL문자로 변환 처리

2.Non-Canonical

-한번에 정해진 크기의 데이터만 읽어 들임

-타이머의 사용

  =대기 시간 설정 가능

-응용

  =항상 정해진 크기의 문자들만을 읽을 때

  =대량의 문자들을 전송하고자 할 때

3.Asynchronous

-read의 조건이 만족될 때까지 block되는 방식

-모든 API에 디폴트로 설정

-호출한 프로그램에게 signal 전송

-전송된 signal은 signal handler이 처리

4.Multi Flexing

-여러 개의 장치들을 다루고자 할 때 유용

-개념이 다소 복잡

-select() 사용

  =입력을 기다리는 동안 CPU에 부하를 주지 않음

※polling방식

-입력이 들어왔는지 루프를 돌면서 체크

-시스템 부하에 의한 수행 속도를 저하 야기

※open함수에서 NOCTTY는 터미널 장치가 컨트롤 터미널이 되는 것을 막는 것이다.

-만약 데이터에 제어문자와 같은 문자가 포함하고 있으면 컨트롤 터미널을 사용하게되면 의도하지 않는 제어가

실행되기 때문에 그것을 방지하기 위해서 꼭 사용해주어야 한다.


728x90