본문 바로가기
코스웨어/15년 스마트컨트롤러

2015.04.24.(금)-30번-주재민

by 알 수 없는 사용자 2015. 4. 25.
728x90
반응형

hw 시간

 

직렬 통신

하나의 데이터선을 통해 한 번에 한 비트를 전송하는 통신 방식.

한번에 한비트씩 통신함으로 속도가 느리지만 인프라 구축 시 비용이 적게 든다.

 마이크로 프로세서와 컴퓨터 외부장치가 통신할 때 주로 사용.

양단 간 통신 거리가 먼 경우에 사용

ex) PCCOM Port, USB(Universal Serial Bus), IEEE1394, PCI Express

// IEEE1394: 영상 분야에서 많이 사용

 

○ 병렬 통신

한 번의 많은 정보를 전달하는 방식이다.

대량의 정보를 빠른 시간에 전송하다보니 속도가 빠르다는 장점이 있으나 인프라 구축 시 비용이 많이 든다는 단점이 있다.

마이크로 프로세서와 컴퓨터 내에 주변 장치간의 통신에 주로 사용된다.

ex) HDD

 

직렬 통신의 전송 방식에 따른 구분

 

* 동기식(Synchronous)

 마스터(master)에서 슬레이브(slave)쪽으로 특정 신호를 이용. 

 그 신호에 맞춰 데이터를 송수신하는 방식이다.

데이터 속도가 빠르나 clock 신호 선이 필요하다는 단점이 있다. 

 

* 비동기식(Asyncronous)

 데이터를 보낼 때 특정 약속에 따라 데이터를 송수신하는 방식.

 

전송 방향에 따른 구분

 

단 방향 통신

 한 방향으로만 데이터를 전송하는 방식 ex)라디오, TV

반 이중 통신

 양방향 데이터 송수신이 가능하지만 한 쪽이 송신일 때 다른 방향은 반드시 수신인 형태를 취한다. ex) 무전기, 모뎀

전 이중 통신

양쪽이 자유롭게 송수신이 가능하게 데이터를 전송하는 방식. ex) 전화기

 

USART(Universal Asyncronous Receiver and Transmitter)

 

* 범용 비동기식 Serial 통신 controller

비동기식 serial 통신에 필요한 제어 신호를 생성

// 한 때 유행했던 PC통신(모뎀)을 가능하게 한 장치

 

 

장치 관리자 모드에 통신 포트(com1)이 보인다.

 

 

통신 포트를 클릭하고 포트설정 탭을 클릭하면 설정을 제어할 수가 있다.

 

 

 

ATmega 전송 규칙을 그림으로 나타낸 것.

 

* 패리티 비트로 비트수를 검사하는 이유.

ex) 믹서기 돌릴 때 TV화면 줄이 나온다.  

 고주파 모터 동작 => 통신선로에 노이즈

 

 

* 정지비트

-흐름제어 : 잘 사용 안함

(RTS, CTS 이용해서 )

 

 

USART 구조

-BAUD RATE GERNERATOR - OSC로 제어


 

POLLING

-다른 일 수행중 데이터 들어오면 데이터 읽는 처리 하기 전 데이터 사라질 수 있음


INTERRUPT 방식 권장

- UDRn에 데이터 들어오면 인터럽트 발생




실습

MCU => PC

-SWITCH 4개 사용

-KEY 1 => PC로 A전송

-KEY 2 => PC로 B전송

-KEY 3 => PC로 C전송

-KEY 4 => PC로 D전송

PC->MCU


=POLLING 방식 예제(P801)



=INTERRUPT 방식 예제(P811)

 

 

SW.

 

visual studio에서 메모리 주소 보안 옵션을 끄고 메인 함수의 주소를 추출

 

 

 

 

 

 

메모리 주소 보완 옵션 끄는 명령어 - cl a.c /link /DYNAMICBASE:NO

 

DYNAMICBASE:NO 명령어에 대한 설명 입니다.

로드할 때 Windows Vist의 ASLR(Address Space Layout Randomization) 기능을 사용하여 임의로 기준 주소를 지정할 수 있는 실행 가능 이미지를 생성할지 여부를 지정합니다.

/DYNAMICBASE[:NO]

이 옵션은 실행 파일의 헤더를 수정하여 로드 시 응용 프로그램의 주소가 임의로 지정되어야 하는지를 나타냅니다.

프로그래밍 방식으로 이 링커 옵션을 설정하려면

  • RandomizedBaseAddress()()()를 참조하십시오.

 

 

 

 

 

 

만약 함수가 함수를 return 값으로 반환할 경우 함수의 인자를 어떻게 나타내 주어야 할까?

Q) return 값이 printf 함수인 smart함수를 만들어 보자.

 

?      smart(void)

{

return printf;

}

 

?에 int를 넣고 컴파일을 하고 warning message를 살펴보자.

 

printf의 함수 원형을 확인할 수가 있다.  

int (__cdecl *)(const char *,...)

 

--cdecl삭제.

int (*)(const char *,...) smart(void)

 

해당 형태에서 smart(void)(*)*우측에 삽입한다. 

int (* smart(void))(const char *,...)

 

컴파일 하면 잘됨.

 

편집후기

 hw시간 : 어느 정도 가르치고 알아서 하라는 식. 모르면 하나하나 씩 모두  질문해야 됨.

sw시간:  가르쳐 주는데 뭔가가 빨리 지나가는 느낌. 다 못알아 듯는 게 머리 아픔.

 

 

 

 

 

728x90