재작년 즈음 올렸던, 참고/링크의 글에서 이어지는 내용입니다.
개인적으로 댓글주셨던 '아범테크'님께 질문하고자 하였으나, 잘 생각해보니 이런 질문글을 통해 질문하고 답변해주는 과정을 공개적인 게시글로 작성하는게 사이트 유입 및 구글링 차원에서 도움이 될 것 같아 양해를 구하고 별개의 게시물로 작성합니다.
구글링을 통해 유입되시는 분들께 많은 도움이 되시길.
본론입니다.
아두이노에서 사용되는 Serial.read() 함수는 버퍼에 차 있는 데이터가 없을 시, 2byte의 0xFFFF를 반환합니다. 이는 공식 문서에서도 확인할 수 있습니다.
저는 참고/링크 란에 기재된 과제를 수행하면서 코드를 잘못 짜, Serial.available() 함수가 단 한번만 돌아가도록 했으며, 동시에 변수의 자료형도 2byte가 아닌 1byte 자료형인 byte로 선언함으로서, 0xFFFF와 0x00FF의 앞자리가 잘리도록 코드를 작성하여 -1(0xFFFF)과 255(0x00FF)의 구분을 할 수 없게 만들었고 이는 시리얼통신의 데이터 전송을 끝마치는 0x00FF 3번의 수신을 할 수 없게 만들었습니다.
그렇다면, 이러한 시리얼 통신의 데이터 존재 여부를 판별한다거나, 혹은 읽어들이는 함수들은 아두이노 뿐만 아니라 다른 MCU용 IDE에서도 비슷한 방식으로 특정 값을 "데이터 없음"으로 처리하는 방식으로 처리하게 되나요? (비단 0xFFFF가 아니라 정해진 2Byte의 값 내에서 적당한 값을 설정해서 데이터 수신이 없다는 의미로서 미리 정의해두는것인지?)
예를들면, 아두이노의 Serial.available()는 버퍼에 들어차있는 데이터를 읽었을 때, 이것이 0xFFFF라는 것이 확인되면 데이터 없음으로 처리하는 것으로 보입니다. (1byte 변수에 집어넣기 전에 Serial.available()를 먼저 실행시키면 제대로 걸러지기 때문에 이렇게 생각했습니다)
아니면 별도의 신호 없음을 표현하는 값은 따로 존재하며, 그저 Serial.read() 함수가 특별하게 데이터가 없는 상황에서만 0xFFFF(-1)을 반환하도록 설정된 것 뿐인가요?
이상입니다.