[t:/]$ 지식_

CPU 속도 문제로 발생하는 통신 문제.

2009/02/06

졸릴 때 발로 짠 코드가 있었으니 불특정 확률로 1바이트씩 사라지는 통신버그가 있었다.

패킷의 얼개는 대충 다음과 같다.

[스타트] - [커맨드] - [알멩이] - [CRC] - [엔드]

여기서 [엔드] 패킷의 시작 1바이트가 가끔 사라졌다. 졸려서 대충 무시하고 탈출하도록 짜놨다...

본디 시리얼 쪽이 중간에 이상한 장비들이 끼고 속도가 미묘히 다르면 스톱비트 꼬이기도 하는 경우가 생긴다. 아 몰라 대충 되는 것 같아~ 넘어가장~ ^^♡♪♡♪♡♪

.. 했는데..

결론은 문제가 생겨서 버그를 잡아보기로 했다.

이유는 이러하다. 패킷의 [알멩이] 구간이 꽤 길고, 패킷 전체의 구성은 가변 길이이다. [알멩이] 의 내용을 쭉 훑어서 CRC계산을 한다.

헌데, 이 S/W가 들어가는 칩은 오질라게 느린 칩이다. ARM7. 귀찮아서 인터럽트-큐잉 베이스로 안 짰기 때문에.

CRC를 계산하는 시간이 늘어지면 그 다음 [엔드] 패킷을 놓치는 현상이 일어났던 것이다.

해결법은 다음과 같다. 패킷을 전부 수신 받은 이후로 CRC계산을 미룬다.

OK?









[t:/] is not "technology - root". dawnsea, rss