int8,16,32,64_t , uint8,16,32,64_t 란? + MCU 통신 Serial/Parallel/Synchronous/ASynchronous Communication 직렬,병렬,동기,비동기 통신 - 1

반응형

안녕하세요 카스퍼입니다.
첫날부터 C언어를 올릴줄은 몰랐습니다.

인사는 접어두고!

C언어는 자료형이 char, short ,int ,double... 등등 여러개가있죠
이런 자료형들은 친숙합니다.

근데 int8_t , uint8_t ? 이런녀석들어봤어요?
물론 리눅스나 OS 를 하시는분들은 친숙하게 느껴질 수 있지만 C언어 Level에서는 생소한 자료형이겠지요.

그러나 결국의미는 간단합니다.

결국 int8_t는 부호있는 char를 말하는 것이고
uint8_t는 부호없는 char를 말하는 것입니다.

센스있는 분들은 u가 무슨 약자인지 알겠죠? Unsigned 입니다.
위 키워드를 사용하기위해서는 Visual Studio에서 헤더파일로 stdint.h를 선언해주셔야합니다.

간단하게 그냥 다른 데이터 타입(data type)이라고 생각하시면됩니다.

이걸 왜 사용하냐면 보통 32비트, 64바이트 데이터 길이의 변화에 따라 버그가 존재하는 경우가 간혹 발생합니다. 그렇기 때문에 OS, Linux, Embedded OS 등에서 많이 사용합니다.

많이 참고가 되셨는지요?


MCU의 통신 Communication에 대하여 설명해드리려합니다.


일단 크게 보면 MCU의 통신 방법은 크게 Serial/Parallel/Synchronous/Asynchronous Communication 직렬,병렬,동기,비동기 통신 으로 나뉩니다. 이 외에 여러가지로 나뉘는데 저는 이번 포스트를 시작으로 직렬통신의/동기 비동기에 대한 설명부터 시작하여, 추후에는 병렬 통신을 설명하려합니다.

보통 아트메가 (Atmega)나 아두이노(Arduino) , STM 보드를 쓰다보면 통신을 쓰게됩니다.
당연히 사람대 사람으로도 말이 오고가는데 이런 칩 끼리도 통신을 할 수 있겠죠?

일단 크게 직렬 통신과 병렬 통신에 대하여 설명드리겠습니다.
그전에, 간단하게 이해를 쉽게하기위해 여러분들은 전기회로에서 직렬 연결과 병렬 연결을 배웠습니다.

직렬통신과 병렬통신의 차이는 단지 그 차이입니다.
데이터를 일렬로 줄지어서 직렬로 보낼 것인지, 데이터를 나눠서 병렬 연결 처럼 데이터를 보낼지 차이 뿐입니다.

직렬 통신의 경우는 한가닥의 통로를(?) 통하여 데이터를 순차적으로 전송하게됩니다.

병렬 통신의 경우는 여러개의 신호선 가닥으로 나눠서 보내게 됩니다.

어렵지않죠???

다음은 동기/비동기 통신입니다.
간단하게 동기/비동기를 나누는 기준은 클럭(Clock)이 있냐 없냐 차이입니다.

동기 통신의 경우는 한 문자 단위가 아니라 사용자가 지정해놓은 수만큼의 문자열을 한묶음으로 전송하는 방식을 말합니다.
동기 통신은 통신선 3가닥 방법, 2가닥 방법이있습니다.
3가닥 : SCK(Serial Clock), MOSI(Master Output Slave Input), MISO(Master Input Slave Output) 
2가닥 : SDA(Serial Data), SCL(Serial Clock) 
동기 통신의 핵심은 클럭 (Clock)입니다.

세부적인 설명을 하기위해 Master와 Slave 개념을 간단하게 설명하자면
Master는 오더를 내리는 디바이스, Slave는 오더를 받는 디바이스라 생각하면됩니다.

자 그럼 여기서 Clock이 왜중요하냐
비유를 하면 여러분 친구들이랑 줄넘기 해보셨죠? 타이밍이 맞아야 원활하게 줄넘기를 할 수 있지요.
마찬가지에요 Clock에 맞춰서 데이터를 보내기때문에 원활한 통신이 가능하지요
그리고 데이터의 교환이 없는 사이에도 제어용 신호가 흘러요 (대기)

그리고 동기통신은 타이밍이 척척맞아 통신을 하기 때문에 데이터의 시작과 종료를 알리는 신호가 필요하지않아요(비동기 설명 읽으면 이해 됩니다) 그렇기 때문에 데이터의 전송 속도는 빨라집니다.

비동기 통신의 경우는 Clock이 없어요
그렇기때문에 Start bit와 Stop bit가 있어야해요. 만약 이 두개가 없다면 데이터를 언제 받고 언제 끊고를 할 수가없죠. 동기 통신의 경우는 Clock에 맞춰서 데이터를 주기때문에 Start bit와 Stop bit가 필요없죠. Clock 신호가 있으면 데이터를 받는거고 없으면 데이터를 받지 않기 때문이죠

비동기 통신은 Start bit가 발생하면 지금 데이터 날라간다고 알려줍니다. 그러고 데이터를 쫙 받고 Stop bit를 받으면 데이터 수신을 멈춥니다.

비동기 통신의 경우는 동기통신에 비하여 속도가 약간느려요.

물론 동기/ 비동기 /직렬 /병렬 서로다 장단점이 존재합니다.
동기/ 비동기의 경우 위의 표처럼 정리 할 수 있겠군요.

동기 통신은 가격이 비싸고 회로가 복잡하지만 속도는 보장합니다.
비동기 통신은 가격이 싸고 회로가 단순하지만 속도가 보장이 안되는군요.
보통 비동기통신은 키보드에 많이씁니다. 상관없이 누르기만해서 자판을 치니까요. 이제좀 이해?

직병렬의 차이는 이정도면 충분하겠죠?
여러분이 컴퓨터에 USB를 꼽던 마우스 키보드를 꼽던 대부분 직렬입니다.
근데 컴퓨터 안에 뜯어보면 GPU , CPU, 하드 디스크 등등 데이터를 많이처리 해야하는 녀석들은 병렬연결입니다.

결론 : 서로 장단점이 존재하며, 용도에 알맞게 사용 할 것!

많이 도움 되셨을지 모르겠네요.
오늘 포스트 여기서 마치겠습니다.

댓글

Designed by JB FACTORY