저는 항상 char 포인터, 문자열, 문자열 및 대부분의 포인터 관련 개념에 문제가있었습니다. 이 ;-) 어쩌면 내가strcpy는 Arduino의 이전 시리얼을 엉망으로 만들고있는 것 같습니다.
세계적으로 선언 너무 늙었 어 :
char * message;
가 serialOut
매우 짧은 8 문자 문자열, 식별자 (X10D
) 한 후 데이터 (nnn
) 및 널 종결 자. 나는 시리얼을 통해 전송 된 데이터가 앞에서 다듬어지고, idetifier가 누락 된 것을 발견하고있다. 첫 번째 통과에서는 완전하고 정확하지만 후속 통과에서는 세 자리 만 수신되었습니다.
message
은 디버깅을 위해 화면에 출력하는 디버그 메시지입니다.
device
및 onOff
이 올바르게 채워집니다.
기능 일으키는 문제 :
byte device = btag-X10_TAG_OFFSET;
byte onOff;
char serialOut[8];
memset (serialOut, 0, 8);
if(x10[device - 1]==1){
onOff = 0;
} else {
onOff = 1;
}
x10[device-1]=-2;
sprintf(serialOut, "X10D%02i%i", device, onOff);
Serial.println(serialOut);
strcpy(message, serialOut); // this line appears to 'modify' the previous line
내가 마지막 줄을 제거하고 그것을 바꿀 경우 :
message = serialOut;
선행하는 직렬 통신이 완료됩니다!
둘 다 가지고 있지 않다면 다른 쪽 끝의 데이터가 가비지 (아직 해독되지는 않지만 인쇄 할 수없는 문자로 표시됩니다. 이것이 디버그를 설정하는 이유입니다).
나는 이것이 관련 될 수 없다고 생각하지만, 평등은 문제를 '고치는'것처럼 보인다.
지금 마지막 줄을 모두 제거하면 정상으로 돌아갑니다. 직렬 회선에 라디오 간섭이 있습니까? 나는 잘 모르겠다. 분명히'message = serialOut' 결과는 쓰레기가됩니다. 그렇다면 코드에서 나중에 사용하기 위해'serialOut'을'message'에 어떻게 복사합니까? – Madivad
내가 정말로 얻지 못하는 이유는 memcpy, memmove, strcpy를 사용하는 이유입니다. serial.println을 실행하면 오류가있는 데이터가 전송 된 후에 결과가 – Madivad