졸릴 때 발로 짠 코드가 있었으니 불특정 확률로 1바이트씩 사라지는 통신버그가 있었다.
패킷의 얼개는 대충 다음과 같다.
[스타트] - [커맨드] - [알멩이] - [CRC] - [엔드]
여기서 [엔드] 패킷의 시작 1바이트가 가끔 사라졌다. 졸려서 대충 무시하고 탈출하도록 짜놨다...
본디 시리얼 쪽이 중간에 이상한 장비들이 끼고 속도가 미묘히 다르면 스톱비트 꼬이기도 하는 경우가 생긴다. 아 몰라 대충 되는 것 같아~ 넘어가장~ ^^♡♪♡♪♡♪
.. 했는데..
결론은 문제가 생겨서 버그를 잡아보기로 했다.
이유는 이러하다. 패킷의 [알멩이] 구간이 꽤 길고, 패킷 전체의 구성은 가변 길이이다. [알멩이] 의 내용을 쭉 훑어서 CRC계산을 한다.
헌데, 이 S/W가 들어가는 칩은 오질라게 느린 칩이다. ARM7. 귀찮아서 인터럽트-큐잉 베이스로 안 짰기 때문에.
CRC를 계산하는 시간이 늘어지면 그 다음 [엔드] 패킷을 놓치는 현상이 일어났던 것이다.
해결법은 다음과 같다. 패킷을 전부 수신 받은 이후로 CRC계산을 미룬다.
OK?