제발 저를 참아주세요. 저는 C에서 새로운데, 저는 Arduino를 프로그래밍하려고합니다. 0-255 범위의 바이트 값을 특정 길이의 데이터 프레임 밖으로 뱉어 프로그램을 작성하고 싶습니다. 오류를 재현하는 최소 코드는 아래 코드 블록에 있습니다. 오류 : 'char *'에서 'char'로의 변환이 올바르지 않습니다.
지금 내 느낌이 나는 '반환 프레임을'학대하고있어 것입니다,하지만 난 그냥 뭐가 잘못 알아낼 수 없습니다 : 컴파일 할 때 나는 다음과 같은 오류가 발생합니다. 나는 수신 PC의 16 진 덤프를 실행하면sketch_apr09b.cpp: In function ‘char assembleFrame()’: sketch_apr09b.cpp:9:10: error: invalid conversion from ‘char*’ to ‘char’
char assembleFrame() {
char frame[] = {
0x61 , 0x62 , 0x63
};
return frame;
}
void setup() {
Serial.begin(115200);
};
void loop() {
char frame = assembleFrame();
Serial.print(frame);
}
, 내가보고 싶어 :
00000000 61 62 63 |abc|
00000003
내가 비슷한 질문을 많이 발견했습니다, 난 무엇을 알아낼 수 없습니다 잘못하고있다.
편집 : 이것은 내가 지금까지 생각해 냈지만 잘못된 데이터를받는 것입니다. 나는 이것으로 실제 데이터에 포인터를 보내고 있다고 생각한다.
byte *assembleFrame() {
byte frame[] = { 4 , 'a' , 'b' , 'c' };
return frame;
}
void setup() {
Serial.begin(115200);
};
void loop() {
byte *frame = assembleFrame();
Serial.write(frame , frame[ 0 ]);
}
이 코드는 컴파일되며, 내가 잘못한 것을 봅니다. 나는 char * assembleFrame() 대신에'char * assembleFrame()'을 타이핑했다. 하지만 이제는 새로운 문제가 생겼습니다. 페이로드에 null 바이트가 포함될 수 있으므로 null로 끝나는 문자열을 사용할 수 없습니다. 고정 크기는 문제가되지 않습니다. 그렇게 쉽게 해결할 수 있습니까? (귀하의 회신에 대해 언급하면서 나는 DuckDuckGo에 갈 기회가 없었지만 지금 당장 그것을 할 것입니다). – jippie
한 번에 하나씩'Serial.write() '에 바이트를 보낼 수 있는데, 이는 널을 허용해야합니다. 어쩌면'assembleFrame' 프레임을 버퍼 (문자열을 가리키는 포인터)에 쓰고 길이를 반환하면 버퍼를 반복하고'char '를'Serial.write()'할 수 있습니다. – lunixbochs
네, 그냥 1 초 전 자신을 발견 :) 실제로 당신은 Serial.write (buf, len 0)로 길이 매개 변수를 전달할 수 있습니다. – jippie