char 1byte int 2byte float long double 4byte
ISR(USART0_RX_vect) { if(!(UDR0 == '\r' || UDR0 == '\n')) { rxdata = UDR0; } } 잘못된 코드의 예이다. UDR0 == '\r'에서 이미 한 바이트를 수신하게 된다 따라서 올바른 rxdata가 들어가지 않는다. 따라서 임시변수에 UDR0을 담고 검사하는 것이 맞는 코드이다 char rxdata; ISR(USART0_RX_vect) { char tmp = UDR0; if(tmp != '\r') { rxdata = tmp; } }
RS232C와 UART의 신호 레벨은 차이가 있다. 따라서 시리얼 통신 환경에서 신호 레벨을 변환해줘야 하는 장치가 필요하다. 하지만 최근에 RS232C 포트가 감소하고, USB 포트가 증가하는 추세로 USB/UART 변환 장치가 필요하다. RS232C의 경우 포트 번호인 n은 고정되어 있지만, USB를 통해 지원되는 시리얼 포트는 n이 가변적이다
보율은 1초 동안 신호가 변하는 횟수 bps는 보율 * 정보가 이루는 비트 수
UART 수신에서 오류가 계속 발생했지만 결국 원인을 찾지 못해서 처음부터 원인을 파헤쳐봤다 빨간 네모로 박스친 곳 중 1. Local echo을 auto로 설정하면 putty에서 보내는 데이터가 가긴 가지만 사용자가 볼 수는 없다. 따라서 실수로 다른 문자를 입력할 수도 있으니 Force on으로 설정하는 것이 좋다. 하지만 보낸 것을 컨트롤러에서 다시 보낸다면 중복되니 상황에 맞게 설정해주면 좋을 것 같다 2. Local line editing을 Force on으로 설정하면 기존의 바이트 단위 입력이 아니라 문장을 입력하고 엔터키를 누를 때 데이터가 전달되도록 해준다. 따라서 문자열을 잘못 입력한 경우 백스페이스 키를 눌러 편집이 가능하다 윈도우에서 개행(\r\n)은 \n의 하나로 2개의 문자를 사용..
헤더파일은 컴파일 되는 것이 아니라 .c가 컴파일 되기 전에 전처리과정을 중 소스 내에 필요한 내용을 삽입하는 역할을 한다. 다만 global 변수를 헤더파일에 선언할 경우, 여러 소스파일에서 해당 변수를 사용할 때 컴파일러는 하나의 변수로 link하지 못하고 중복선언으로 알게된다. 따라서 초기화할 소스파일에서 선언을 하고 다른 소스파일에서는 extern으로 변수를 가져와서 사용해야 한다