Arduino 는 직렬 포트 를 통 해 구조 체 를 보 냅 니 다.

Arduino 의 직렬 포트 는 두 가지 로 보 낼 함수 Serial. print () 류 와 Serial. write () 류 가 있 습 니 다. 전 자 는 Ascii 코드 형식 으로 보 낼 내용 인 코딩 으로 보 낼 것 입 니 다. 그래서 우 리 는 마지막 으로 하나의 ASCII 코드 를 조합 하여 만 든 데 이 터 를 받 고 보 았 습 니 다. 본질 적 으로 문자열 이 되 었 습 니 다.후 자 는 바이트 형식 으로 원본 데 이 터 를 직접 보 내기 때문에 직렬 수신 도구 에서 본 데 이 터 는 어 지 러 운 코드 이 고 컴퓨터 에 이렇게 저 장 됩 니 다.
    어떤 때 는 구조 체 형식의 데이터 와 같은 데이터 구 조 를 스스로 정의 할 수 있 습 니 다.구조 체 는 일부 기본 적 인 데이터 유형 으로 조합 되 어 사용 자 는 그 내용 을 자 유 롭 게 추가 하고 배정 할 수 있 지만 자신의 실험 과 자 료 를 조회 한 결과 싱글 칩 마이크로컴퓨터 와 컴퓨터 에서 정 의 된 구조 체 는 차이 가 있다 는 것 을 알 게 되 었 다.우 리 는 아래 의 구조 체 를 예 로 들 었 다.
typedef struct sdata
{
    char  c;
    int16_t  i;
    float   f;
}sdata;

    Arduino 의 데이터 형식 크기 로 계산 하면 1 + 2 + 4 = 7 이 고 sizeof (sdata) 를 통 해 검 증 된 후에 도 7 입 니 다.만약 에 이 구조 체 가 Liux 운영 체제 에서 sizeof (sdata) 로 계산 한 결과 가 8 이 라 고 정의 하면 컴퓨터 주소 정렬 문제 와 관련 되 므 로 구체 적 으로 글 을 참고 하 시기 바 랍 니 다.http://blog.sina.com.cn/s/blog_5f77c7270100dnoy.html。위의 문 제 를 알 게 되면 우 리 는 구조 체 를 디자인 할 때 주의해 야 한다. 서로 다른 데이터 유형 순 서 는 서로 다른 구조 체 의 크기 를 초래 할 수 있 고 우 리 는 싱글 칩 마이크로컴퓨터, 예 를 들 어 Arduino 디자인 구조 체 를 디자인 할 때 정렬 문 제 를 고려 해 야 한다. 예 를 들 어 상기 사례 의 char 를 2 차원 그룹 char c [2] 로 정의 하거나 char 를 마지막 에 두 어야 한다. 그러면 우리 가 받 을 때 구조 체 의 크기 를 잘못 알 더 라 도받 은 데이터 도 구조 체 에 정확하게 넣 을 수 있다.
    Arduino 에 서 는 print 함수 와 write 함수 가 구조 체 데 이 터 를 직접 보 낼 수 없습니다. 구조 체 는 사용자 가 정의 한 것 이기 때문에 다른 데이터 처럼 고정된 형식 이나 크기 가 있 을 수 없습니다.그래서 우 리 는 구조 체 를 바이트 배열 로 바 꿔 야 한다. 그러면 write 함 수 를 통 해 보 낼 수 있 고 다음은 두 가지 방법 으로 전환 할 수 있다.
        방법 1: memcpy 함 수 를 사용 하여 구조 체 의 데 이 터 를 바이트 배열 에 복사 합 니 다.                   
sdata s;

......

byte b[sizeof(sdata)];
memcpy(b,&s,sizeof(sdata));
Serial.write(b,sizeof(sdata));

        방법 2: 하나의 바이트 형식의 포인터 로 구조 체 의 첫 주 소 를 강제로 가리킨다.              
sdata s;

......

byte *tobyte=(byte*)&s;
Serial.write(tobyte,sizeof(sdata));

        두 가지 방법 은 Arduino 에서 모두 테스트 해 봤 는데 모두 성공 적 으로 발송 할 수 있 습 니 다.
        이 데 이 터 를 받 을 때 모두 바이트 흐름 입 니 다. 보통 버퍼 바이트 배열 에 저 장 됩 니 다. 원본 구조 체 로 바 꾸 려 면 memcpy 를 사용 할 수 있 습 니 다. 용법 은 같 습 니 다. 원본 과 목표 가 위 치 를 바 꾸 었 을 뿐 입 니 다.
        마지막 으로 한 가지 더 말씀 드 리 지만 구조 체 가 크 고 데이터 가 많 으 면 구조 체 가 할당 되 기 전 데이터 가 불확실 합 니 다. 불확실 성 이 가 져 온 문 제 를 피하 기 위해 우 리 는 이 구조 체 를 어떻게 초기 화 해 야 합 니까?하나씩 할당 할 수 는 있 지만 귀 찮 습 니 다.요구 가 높 지 않 으 면 구조 체 내의 데 이 터 를 모두 0 으로 설정 하 는 것 도 초기 화 라 고 할 수 있 습 니 다. memset 함수 로 목표 주소 내의 데 이 터 를 모두 지정 한 데이터 로 설정 할 수 있 습 니 다.더 좋 은 방법 이 있 을 지 모 르 겠 지만 아 는 희망 이 있다 면 교류 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기