Bitte tragen Sie mit mir, ich bin neu bei C und ich versuche, ein Arduino zu programmieren. Ich möchte ein Programm schreiben, das einen Datenrahmen bestimmter Länge mit Bytewerten zwischen 0 und 255 ausspuckt. Der Mindestcode zum Reproduzieren des Fehlers befindet sich im folgenden Codeblock. Beim Kompilieren erhalte ich folgende Fehlermeldung:Fehler: ungültige Konvertierung von 'char *' zu 'char'
sketch_apr09b.cpp: In function ‘char assembleFrame()’: sketch_apr09b.cpp:9:10: error: invalid conversion from ‘char*’ to ‘char’
Nun ist mein Eindruck ist, dass ich das ‚Return frame‘ bin schlecht zu behandeln, aber ich kann einfach nicht herausfinden, was los ist.
char assembleFrame() {
char frame[] = {
0x61 , 0x62 , 0x63
};
return frame;
}
void setup() {
Serial.begin(115200);
};
void loop() {
char frame = assembleFrame();
Serial.print(frame);
}
Wenn ich einen hexdump auf dem empfangenden PC laufen, ich will sehen:
00000000 61 62 63 |abc|
00000003
Ich habe viele ähnliche Fragen gefunden, war nicht in der Lage, herauszufinden, was ich bin falsch machen.
BEARBEITEN: Dies ist, was ich bisher kam, aber falsche Daten erhalten. Ich denke, ich sende den Zeiger auf die tatsächlichen Daten mit diesem.
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 ]);
}
Dieser Code kompiliert, und ich sehe, was ich falsch gemacht habe, thnx. Ich habe 'char * assembleFrame()' anstelle von 'char * assembleFrame()' eingegeben. Aber ich habe jetzt ein neues Problem: Ich kann keine Null-terminierten Strings verwenden, weil die Payload Nullbytes enthalten kann. Feste Größe ist kein Problem. Ist das einfach zu lösen? (Ihre Antwort kommentierend, ich hatte keine Chance zu DuckDuckGo dies, aber werde es jetzt tun). – jippie
Sie können nacheinander Bytes nach 'Serial.write()' senden, was Nullen zulassen sollte. Vielleicht habe 'assemblyFrame' den Rahmen in einen Puffer schreiben (Zeiger auf einen String) und eine Länge zurückgeben - dann kann man durch den Puffer und 'Serial.write()' jedes 'char' durchlaufen. – lunixbochs
Ja, ich fand es gerade vor 1 Sekunde selbst :) Tatsächlich können Sie einen Längenparameter mit Serial.write übergeben (buf, len 0) – jippie