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
  Wartet Serial.begin() auf COM-Port? tollewurst 4 217 Gestern 09:50
Letzter Beitrag: rkuehle
  Arduino funktioniert immer erst nach reset Maxi290997 11 758 25.07.2017 09:38
Letzter Beitrag: Maxi290997
  Serial.write fraju 5 717 23.07.2017 21:57
Letzter Beitrag: Mathias
  LEDs und Sound synchron nach kurzem Tastendruck Thor Wallhall 32 1.274 24.06.2017 21:01
Letzter Beitrag: georg01
  Array mit Serial.read befüllen Gonmaus 4 420 01.05.2017 09:13
Letzter Beitrag: Gonmaus
  Arduino UNO hat sich Aufgehängt?? huber5093 24 1.537 28.04.2017 19:58
Letzter Beitrag: Tommy56
  serial monitor, Ausgabe übereinander möglich?? silversurfer123 4 299 18.04.2017 19:19
Letzter Beitrag: silversurfer123
  Interrupt und Software Serial BennIY 6 489 29.03.2017 22:25
Letzter Beitrag: BennIY
  Neustart nach SD-Kartentausch erforderlich? Retian 10 577 27.02.2017 20:41
Letzter Beitrag: Retian
  RGB Animation über Serial Steuern Medolino 5 422 20.02.2017 16:14
Letzter Beitrag: Medolino

Gehe zu:


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