에휴.. 오늘 또 허접한 실수한건해서.. ㅠ.ㅠ;;
넋두리나 하려고 들렀습니다.. 흑흑..
typedef struct {
BYTE byOffset0;
BYTE byOffset1;
BYTE byOffset2;
}ST_ZGLN;
typedef struct {
ST_ZGLN ZglnR;
ST_ZGLN ZglnL;
WORD wHostIF;
BYTE byHostIFStatus[5];
BYTE byResv1;
BYTE bySTCount;
DWORD dwOldR;
DWORD dwOldL;
BYTE bySum;
}ST_ALIVE_INFO;
철도 제어를 할때 각 장치들의 고장 정보나 특발(먼저 통과시킬 열차)정보 간격조정 등등의 정보를 주고 받습니다.
드디어 오늘!! 위의 생존정보(?) 만 작성하면 끝이었지요...
각 장치가 살았니~ 죽었니~ 정보를 5초 단위로 보내는데 구조를 저렇게 짰습니다.
으샤으샤~ 만들어.. 우와 ~! 드디어 끝이다!!! 라고 기뻐하며 시뮬레이터를 가동시켰더니..
어라.. 다들 죽었다고 나오네요... ㅡㅡ;
로그레벨을 변경해서 로그를 찍어보니 이상하게도 헤더의 체크섬정보를 엉뚱한데서 얻어오는게 아니겠습니까!!
소스 코드를 이잡듯 뒤져도 도저히 나오지가 않는 겁니다!!!
이런 XXXX에 XXX해서 XX했다가 XXXXX할!!!! 이라며 머리를 쥐어뜯으며 절규를 2시간여 했습니다..;;
원인을 찾고보니..;;
sizeof(ST_ALIVE_INFO)가 24바이트가 아닌 28바이트가 나와서 였습니다.;;
8바이트 단위로 끊게 옵션이 설정되어 있었거든요...;;
그러니 더욱 웃긴것은.. 다른 모든 구조체들은 운좋게도 딱 8바이트가 기적처럼 맞아 떨어지더군요..;;
뭐 BYTE단위가 많긴 하지만 송수신에 직접 사용하는 구조체가 12개인데 말입니다..;;
11개가 멀쩡하고, 유독 문제가 있는 12개째 구조체를 제일 마지막에 작성하는 덕분(?)에 토탈 3시간동안 쌩쑈를 하다보니 집에가라고 종이 치는군요.. ㅡㅡ;
애초에!!! 다른 녀석들도 안됬더라면.. 좀더 빨리 알아챘을텐데... 흙흙....ㅠㅠ
하아.. 정말 허탈합니다.. ㅠ.ㅠ;;
|