INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
return wert ändert sich nach Serial.print()
16.07.2014, 08:23
Beitrag #1
return wert ändert sich nach Serial.print()
Hey,
Ich habe ein komisches Problem in meinem Programm

Ich habe ein Mega 2560 und ein Display, von dem ich über RS232 Daten empfange.
In meiner empfangsroutine möchte ich am ende die antwort des Displays in einem byte array zurückgeben.

Zitat:if(buffer[0]==6)
{
for(int i=0;i<buffer[2]+1;i++)
{
buffer2[i]=buffer[i+2];
}
}
return buffer2;

wenn ich das so zurückgebe und das array im Serialmonitor ausgebe, kriege ich nur ganz viele 0 ausgegeben.
Mache ich aber vor dem return ein Serial.print oder write oder println, dann werden mir im hauptprogramm die richtigen Werte im array ausgegeben.

Ich kann mir diese Phänomen nicht erklären und bin etwas ratlos, schließlich ändert das print ja nichts am buffer Huh
Ist jemandem schonmal so etwas ähnliches passiert, oder kennt jemand evtl ne Lösung dazu?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.07.2014, 09:36 (Dieser Beitrag wurde zuletzt bearbeitet: 16.07.2014 09:36 von rkuehle.)
Beitrag #2
RE: return wert ändert sich nach Serial.print()
Moin,

auch wenn ich den Zweck nicht wirklich verstanden habe (Wie kann man von einem Display eine Antwort bekommen Huh ) denke ich, dass das Problem in der Nutzung von RX/TX für den SerialMonitor und das RS232 besteht. Durch print, println, write usw. wird die RX Leitung auf HIGH gesetzt bzw. für die Standardkommunikation wieder "annektiert" und du bekommst die erwarteten Daten.
Da du den Mega zur Verfügung hast, solltest du seine Möglichkeiten nutzen und die zusätzlichen RX/TX Kanäle für die E/A-Aufgaben einsetzen.
Serial1: RX 19 / TX 18
Serial2: RX 17 / TX 16
Serial3: RX 15 / TX 14
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.07.2014, 09:48
Beitrag #3
RE: return wert ändert sich nach Serial.print()
Danke für die schnelle Antwort.

Das Display ist auf einem extra Board, und nur für die Grafikdarstellung da, es kann keine Logikoperationen durchführen, deshalb muss ich mit dem Arduino die Logikoperationen machen.

Ich meinte mit dem Serial.write, welches ich vor dem return schreibe, damit die Daten im Hauptprogramm richtig ausgegeben werden, den Serial vom Schnittstellenmonitor.
Das Display steuer ich über Serial2.

In dem Moment wo ich das Serial.write() schreibe, sind ja schon alle Daten vom Display empfangen. Deswegen versteh ich nicht genau wieso das einen Unterschied macht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.07.2014, 09:54
Beitrag #4
RE: return wert ändert sich nach Serial.print()
Da das wohl recht komplex ist solltest du vllt. den Code und die benutzte Hardware mal einstellen. Sonst ist das eher ein Blindflug Huh

Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.07.2014, 10:12 (Dieser Beitrag wurde zuletzt bearbeitet: 16.07.2014 10:13 von ShardZero.)
Beitrag #5
RE: return wert ändert sich nach Serial.print()
Das Display ist ein eDip TFT 4.3"

Aber ich habe mich gerade dazu entschieden einfach "buffer2" global zu machen, damit ist das ganze Problem "weg" auch wenn ich nicht ganz verstehe warum es auftritt Confused

Aber vielen Dank für deine Tatkräftige und schnelle Unterstützung
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.07.2014, 14:57
Beitrag #6
RE: return wert ändert sich nach Serial.print()
Hi,
hier ist meine Vermutung.

Wenn Du buffer2 lokal deklariert hast, etwa so:
Code:
byte buffer2[50];
...dann liegen die Daten auf dem Stack-Bereich der Funktion selbst. Nach dem "return" wird dieser Bereich sozusagen dem System zurück gegeben. Am Ende machst Du ein
Code:
return buffer2;
"buffer2" (ohne [i]) ist ein Zeiger auf den Speicherbereich, in dem die Daten stehen. D.g. in den Stack-Bereich, der nach dem return nicht mehr "gültig" ist. Wenn Du dann versuchst, daraus was zu lesen, dann kann alles mögliche dabei rauskommen.

Wenn Du buffer2 hingegen global deklarierst, dann existiert es unabhängig von irgendwelchen Stacks in Funktionen.

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.07.2014, 16:54 (Dieser Beitrag wurde zuletzt bearbeitet: 16.07.2014 16:56 von rkuehle.)
Beitrag #7
RE: return wert ändert sich nach Serial.print()
Da war ich wieder völlig blind.
Thorsten hat so was von Recht. Dafür gibt's ein Positiv Smile
Logisch: Return eines Array gibt nur den Pointer darauf zurück. Da das Array lokal deklariert ist, kommt als Pointer 0 raus, da das Array nicht mehr existiert.
Habe wieder was gelernt. Danke!

Grüße RK

PS: habe es nur wiederholt um es mir selber einzuhämmern.

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  while Schleife nach sleep mode interrupt tklaus 13 268 23.11.2016 17:40
Letzter Beitrag: Tommy56
  Arduino lässt sich nicht installieren bergfrei 4 154 20.11.2016 18:34
Letzter Beitrag: bergfrei
  Ausgabe Serial Monitor zu viele Byt`s Hannes 0 98 12.11.2016 20:29
Letzter Beitrag: Hannes
  Speicher sparen bei serial.print?? DL1AKP 3 196 02.09.2016 13:32
Letzter Beitrag: hotsystems
Question Keine Verbindung via USB nach flashen des Programms chaoscrack 5 204 23.08.2016 14:58
Letzter Beitrag: hotsystems
  Arduino lässt sich nicht mehr beschreiben Maxi290997 15 989 07.08.2016 11:40
Letzter Beitrag: Maxi290997
  Serial Monitor ASCII 1 schreiben BennIY 11 582 01.08.2016 16:42
Letzter Beitrag: Mathias
  Serial.write Mathias 6 386 29.07.2016 17:06
Letzter Beitrag: Mathias
  Serial Monitor Rudi 5 637 02.06.2016 11:37
Letzter Beitrag: Bitklopfer
  Serial.printeln, Stellen verschwinden Mathias 6 261 27.05.2016 17:44
Letzter Beitrag: Mathias

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste