시리얼 통신 질문입니다. 도와주세요
글쓴이: sjun027 / 작성시간: 수, 2014/03/12 - 7:41오후
안녕하세요 rs232 시리얼 통신을 하고 있습니다.
구조체로 보내고 char[]로 받으려고 합니다.
#pragma pack(1)
tydepef struct myStruct{
char temp1;
int temp2;
double temp3;
char temp4;
};
#pragma pack()
이렇게 보내면 char[]로 받아서 myStruct만큼 메모리 복사해서 넣습니다.
int, char는 잘 들어가는데 double은 늘 이상하게 들어가네요..
PC에서 PC로 보내서 endian은 같을테고 구조체 padding도 pack했는데.. 도무지 잘 모르겠습니다..
고수분들의 도움을 좀 부탁드립니다. 감사합니다.
Forums:
rs232로 보낼 때 binary 모드로 보내야
rs232로 보낼 때 binary 모드로 보내야 합니다.
text 모드로 보내면 값에 따라서 이상하게 동작할 수 있습니다.
바이너리모드입니다.
네 dcb를 바이너리모드로 설정하고 한 결과입니다. 다른 방법이 없을까요?
시리얼 모니터링 프로그램으로 받아서 확인해
시리얼 모니터링 프로그램으로 받아서 확인해 보시던지,
받는 코드를 올려 보세요.
바이트단위로 비교해보세요.
double로 변환한 값을 읽지마시고 바이트 단위로 비교해보세요. 특정 비트가 잘렸거나 하는 일이 발생했을 듯 합니다. 양자의 통신규약이 서로 다르거나, 애초에 통신규약 자체가 잘못 설정됐을 수 있습니다. (개인적으로 의심하는건 데이터 비트 자체가 7비트로 세팅됐을 가능성입니다.)
char나 int는 그 잘린 비트의 영향 없이도 정상적인 값이 전송될 확률이 상대적으로 높으니 발견을 못 한 걸수도 있습니다.
struct전체를 바이트단위로 출력해서 양자의 값을 비교해보세요.
--
댓글 달기