시리얼 통신 질문입니다. 도와주세요

sjun027의 이미지

안녕하세요 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했는데.. 도무지 잘 모르겠습니다..

고수분들의 도움을 좀 부탁드립니다. 감사합니다.

라스코니의 이미지

rs232로 보낼 때 binary 모드로 보내야 합니다.
text 모드로 보내면 값에 따라서 이상하게 동작할 수 있습니다.

sjun027의 이미지

네 dcb를 바이너리모드로 설정하고 한 결과입니다. 다른 방법이 없을까요?

라스코니의 이미지

시리얼 모니터링 프로그램으로 받아서 확인해 보시던지,
받는 코드를 올려 보세요.

mirheekl의 이미지

double로 변환한 값을 읽지마시고 바이트 단위로 비교해보세요. 특정 비트가 잘렸거나 하는 일이 발생했을 듯 합니다. 양자의 통신규약이 서로 다르거나, 애초에 통신규약 자체가 잘못 설정됐을 수 있습니다. (개인적으로 의심하는건 데이터 비트 자체가 7비트로 세팅됐을 가능성입니다.)

char나 int는 그 잘린 비트의 영향 없이도 정상적인 값이 전송될 확률이 상대적으로 높으니 발견을 못 한 걸수도 있습니다.

struct전체를 바이트단위로 출력해서 양자의 값을 비교해보세요.

--