Linux의 직렬 포트에서 데이터를 읽는 프로그램을 작성 중입니다. 데이터는 다음의 프레임 포맷과 다른 디바이스에 의해 전송된다 : 도시 옥텟 1,2- 데이터의 한 종류로 포함C에서 구문 분석 및 데이터 프레임 읽기?
|start | Command | Data | CRC | End |
|0x02 | 0x41 | (0-127 octets) | | 0x03|
----------------------------------------------------
데이터 필드는 127 개 옥텟을 포함; 옥텟 3,4는 다른 데이터를 포함합니다. 나는
내가 작성 및 리눅스에서 시리얼 포트에서 데이터를 읽는 방법을 알고 이러한 데이터를 얻기 위해 필요하지만, 그것은 단지 작성하고
내 문제 ("ABD"와 같은) 간단한 문자열을 읽는 것입니다 나는 그래서 내가 할 수있는 것을 위와 같이 포맷 된 데이터 프레임을 구문 분석하는 방법을 모르는 것입니다 :
- 데이터 필드
- 데이터 옥텟 3,4에서 얻을에 옥텟 1, 2의 데이터를 얻을 수 데이터 필드
- CRC 필드의 값을 가져 와서 데이터의 일관성을 검사합니다. 여기
읽고에서와 리눅스에서 시리얼 포트에 간단한 문자열을 쓰기 샘플 싹둑 코드 :
int writeport(int fd, char *chars) {
int len = strlen(chars);
chars[len] = 0x0d; // stick a <CR> after the command
chars[len+1] = 0x00; // terminate the string properly
int n = write(fd, chars, strlen(chars));
if (n < 0) {
fputs("write failed!\n", stderr);
return 0;
}
return 1;
}
int readport(int fd, char *result) {
int iIn = read(fd, result, 254);
result[iIn-1] = 0x00;
if (iIn < 0) {
if (errno == EAGAIN) {
printf("SERIAL EAGAIN ERROR\n");
return 0;
} else {
printf("SERIAL read error %d %s\n", errno, strerror(errno));
return 0;
}
}
return 1;
}
사람이 몇 가지 아이디어를 가지고하시기 바랍니다 하는가를?
'코드'블록에 코드를 입력하면 읽기가 더 쉬울 것입니다. – KevinDTimm