Arduino 는 직렬 포트 를 통 해 구조 체 를 보 냅 니 다.
2481 단어 프로 그래 밍 언어
어떤 때 는 구조 체 형식의 데이터 와 같은 데이터 구 조 를 스스로 정의 할 수 있 습 니 다.구조 체 는 일부 기본 적 인 데이터 유형 으로 조합 되 어 사용 자 는 그 내용 을 자 유 롭 게 추가 하고 배정 할 수 있 지만 자신의 실험 과 자 료 를 조회 한 결과 싱글 칩 마이크로컴퓨터 와 컴퓨터 에서 정 의 된 구조 체 는 차이 가 있다 는 것 을 알 게 되 었 다.우 리 는 아래 의 구조 체 를 예 로 들 었 다.
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 함수 로 목표 주소 내의 데 이 터 를 모두 지정 한 데이터 로 설정 할 수 있 습 니 다.더 좋 은 방법 이 있 을 지 모 르 겠 지만 아 는 희망 이 있다 면 교류 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
셸 스 크 립 트 프로 그래 밍: sed 명령 으로 텍스트 편집red 는 온라인 편집기 의 일종 이다.그것 은 한 줄 의 내용 을 한꺼번에 처리한다.작업 중 에 한 고객 의 요 구 를 만 났 습 니 다. 기본 와 이 파이 의 ssid 이름 은 MAC 주소 의 뒷 6 자 리 를 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.