2012-09-26 8 views
-1

USART에서 바이트를 받고 메모리 레지스터에 넣습니다. 바이트는 내가 읽고 그에 따라 메시지에 응답해야하는 명령입니다. 단일 바이트를 비교하는 방법을 알고 있으므로 다중 바이트를 비교하는 알고리즘을 제안합니다.여러 바이트 비교

예를 들어 수신 된 바이트는 16 진수 16 04 32 01 00 32와 같습니다. 길이가 서로 다르므로 비교가 어려울 수 있습니다.

+1

루프를 비교합니까? 또한, [무엇을 시도 했습니까?] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+0

어떤 접근 방식을 사용해야할지 모르겠습니다. 비교해야 할 몇 가지 명령이 있습니다. 모든 명령에 대해 루프를 만들어야합니까, 아니면 테이블 조회와 함께 더 간단한 방법이 있습니까? 이 일종의 샘플 코드가 필요합니다. 명령에서 바이트 합계를 시도했는데 동일한 합계가있는 두 개의 다른 명령을 찾았 기 때문에 작동하지 않습니다. – georgiar

+1

받은 메시지의 _all_은 중요하지 않지만 한두 바이트는 메시지 코드와 나머지입니다 데이터입니다. 이렇게하면 단일 바이트 (또는 그 두 바이트) 만 비교 한 다음 실제 메시지 데이터를 처리하기 위해 서브 루틴으로 이동해야하므로 작업이 단순 해집니다. –

답변

1

메시지의 종류 (이 첫 번째 단계에서 신경 쓸 필요가없는 실제 데이터 페이로드)를 명확하게 인식하기 위해 충분한 바이트를 비교하면됩니다. 대부분의 직렬 프로토콜의 경우 지정된 위치의 단일 바이트입니다.

예제 메시지를 보면 첫 번째 바이트는 메시지 유형이고 두 번째 바이트는 데이터 페이로드의 길이라고 추측합니다. 그렇다면 첫 번째 바이트 이상을 확인하고 그에 따라 점프 할 필요가 없습니다. 이것은 대부분 메시지 유형 (첫 번째 바이트)으로 인덱싱 된 점프 테이블을 통해 수행됩니다.

실제 메시지 데이터 페이로드를 처리하는 함수는 데이터로 수행하려는 모든 작업을 수행 할 수 있지만 메시지로 수행 할 작업을 찾기 위해 전체 메시지를 확인하지 않아도됩니다.