|
소스를 보니 어디서 그러는지 알겠습니다.
제가 비슷한 경험이 있거든요...ㅋㅋ
원인은 시리얼포트에서 데이터를 읽어보면서 시작됩니다.
소스에서 보면
unsigned char s[20];
s를 20개의 배열로 확보했는데
시리얼포트로 읽어오는 데이터가 s보다 큰 사이즈면
ComPort3->Read(s,Count);
프로그램이 죽을수 있습니다.
왜냐하면 s의공간외의 다른 인접 공간은 대부분 프로그램의 다른 변수의 공간으로 확보되었을 것입니다.
따라서 Count가 20보다 큰 경우 시리얼에서 읽은 데이터를 다른 변수에다 써 버릴수 있습니다.
그럴경우 재수없으면 프로그램이 죽음..
방법은 간단합니다.
데이터를 읽을 때 s의 크기-1만큼(19만큼)만 읽으면 됩니다. (간단한 예외처리..)
if(Count<sizeof(s)) ComPort3->Read(s,Count);
else ComPort3->Read(s,sizeof(s)-1);
여기서 더 기교를 원한다면 Count가 20 이상이면 그냥 버리는 것입니다.
지금까지 해미의 경험을 바탕으로 두서없이 적었습니다.
도움이 되셨기를 바랍니다.
그럼 이만....
-----------------------------------------------
작은 생각이 세상을 바꾼다. - 정성훈.해미 -
-----------------------------------------------
|