Arduino Forum

International => Deutsch => Topic started by: DF9QA on Apr 18, 2017, 03:28 pm

Title: Serial.print schneidet letztes Zeichen ab.
Post by: DF9QA on Apr 18, 2017, 03:28 pm
Hallo,

ich hoffe, irgendjemand hat eine Idee zu diesem Problem:

Die Ausgabe für folgende procedure:

Code: [Select]
void ExecCmd(String CmdStr) {
 String s = "ADAB1123456789012345";

 Serial.print(s);
 SerialPrintln();


 if (CmdStr == "whois") { Serial.print(s); }
}


sieht folgendermaßen aus:

ADAB1123456789012345
ADAB112345678901234

Bei dem zweiten Serial.print() wird das letzte Zeichen des  String abgeschnitten.


Grüße

Knut
Hat dazu jemand eine Idee?


Title: Re: Serial.print schneidet letztes Zeichen ab.
Post by: combie on Apr 18, 2017, 03:53 pm
Bei mir passiert das nicht!

Code: [Select]
void ExecCmd(String CmdStr) {
 String s = "ADAB1123456789012345";

 Serial.print(s);
 Serial.println();


 if (CmdStr == "whois") { Serial.print(s); }
}

void setup()
{
 Serial.begin(9600);
 String a = "whois";
 ExecCmd(a);
}

void loop()
{
}

Resultat:

Code: [Select]
ADAB1123456789012345
ADAB1123456789012345
Title: Re: Serial.print schneidet letztes Zeichen ab.
Post by: jurs on Apr 18, 2017, 04:30 pm
Bei mir passiert das nicht!
Das glaube ich Dir.

Aber ich glaube dem Themenstarter NICHT, dass er DEN GANZEN CODE seines Sketches gepostet hat, mit dem er den Fehler bei sich beobachtet.

Womöglich liegt hier mal wieder der Fall vor, dass ein Themenstarter eine vollständig erschöpfende Auskunft zu einem Problem erwartet, er aber seinen Code nur in stark verkürzter Form gepostet hat. Ggf. auch so stark verkürzt, dass der behauptete Fehler mit dem geposteten Codeschnipsel überhaupt nicht auftritt.

Darüber hinaus hat der Themenstarter versäumt zu schreiben,
-welches Arduino-Board
und welche Arduino-IDE-Version
- er auf welchem PC-Betriebssystem verwendet, um den Sketch zu kompilieren.

So hat er mit seinem "Neuen Thema" gleich den Grundstein dafür gelegt, dass NIEMAND den behaupteten Fehler mit derselben Hard- und Softwarekonfiguration bei sich nachvollziehen kann.
Title: Re: Serial.print schneidet letztes Zeichen ab.
Post by: combie on Apr 18, 2017, 04:56 pm
Nein!
Ich werde mich dem Misstrauen standhaft widersetzen.

Begründung:
Wer ist schon so, und postet ungetesteten Code, und behauptet da wäre ein Fehler drin?
Sogar mit Ausgabe...

Neee...., das will ich nicht glauben!
Title: Re: Serial.print schneidet letztes Zeichen ab.
Post by: DF9QA on Apr 18, 2017, 06:06 pm
Vielen Dank für Eure witzigen und äußerst qualifizierten Kommentare.

Natürlich war die Prozedur stark vereinfacht. Reduziert auf eine Minimalversion, bei der der Fehler bei mir nach wie vor auftritt, wie man an dem Ausschnitt der Ausgabe sehen kann.

Ich kann natürlich auch die 6000 Zeilen Code posten, damit Spezialisten wie Jurs sofort erkennen, wo das Problem liegt. Wenn wir alle Glück haben, reicht Ihm aber auch die 800 Zeilen der Library in der das auftritt. Dumm nur, dass da ja einige  includes drin sind, die er dann auch wieder nicht versteht, weil es Ihm dann wieder zuviel Code ist. Und dann sind Teile des Source auch noch im Assembler geschrieben. Jurs, willst Du die auch sehen um das Problem erkenne zu können? Ich kann Dir auch noch ein paar andere Sources schicken, damit wir das Problem so richtig schön im "Sourcecode Müll" ersaufen lassen können. Erstes Semester Informatik:

Die Kunst der Fehlersuche besteht darin, den schadhaften Code zu lokalisieren, stark zu vereinfachen und ihn aus dem "abstrakten" Gesamtzusammenhang rauszunehmen. (Entschuldigung: Auch das ist stark vereinfacht)

Ach ja: Verlagerung der Prozedur in den Main Sketch ändert auch nichts am Auftreten des Fehlers.

Und für die Neugierigen: Ich entwickle mit dem Atmel Studio 7 (Windows 7 pro, 64bit) mit Arduino 1.8.2 im Hintergrund, Atmel Ice Hardware Debugger, Rohde & Schwarz Logic Analyzer auf einen Arduino Mega 2560 (original Genuino) welcher fest in eine selbst entwickelten Platine eingebunden ist. Bei dem Arduino werden alle Pins intensiv und zeitkritisch benutzt. Dabei ist der Arduino aber nur "Mess- und Steuerknecht" für die eigentliche Software.

Aber Danke für Eure Mühen. Entschuldigt, wenn ich Eure Kreise gestört habe. Kommt nicht wieder vor. Ich versuche das ohne Eure "Hilfe" zu lösen. Das wird sicherlich schneller gehen.   

Eine schönen Abend noch!


Title: Re: Serial.print schneidet letztes Zeichen ab.
Post by: Serenifly on Apr 18, 2017, 07:10 pm
Und bei all dem hast du noch nichts von call by reference gehört?

Besser:
Code: [Select]

void ExecCmd(String& CmdStr)
{
}


Wird zwar mit dem Problem direkt nichts zu tun haben, wenn du das ständig machst wird nur Speicher und Zeit verschwendet.

Es stimmt aber halt, dass man so nicht sagen kann woran das liegt. Klar ist es schwer sich durch Tausende Zeilen fremden Code zu wühlen, aber das bisschen lässt keine klare Aussage treffen
Title: Re: Serial.print schneidet letztes Zeichen ab.
Post by: Whandall on Apr 18, 2017, 07:38 pm
Das ist/war ja der aufgeblasendste String-Auf-8-Bit-Avr-Benutzer den ich seit langem gelesen habe...
Title: Re: Serial.print schneidet letztes Zeichen ab.
Post by: combie on Apr 18, 2017, 07:46 pm
Das ist/war ja der aufgeblasendste String-Auf-8-Bit-Avr-Benutzer den ich seit langem gelesen habe...
Und, was lerne ich daraus?
Misstrauen aufbauen?
Nein!

Ich werde nicht die Urteile, welche ich mir in diesem Thread gebildet habe, auf andere übertragen.
Title: Re: Serial.print schneidet letztes Zeichen ab.
Post by: Whandall on Apr 18, 2017, 07:56 pm
Ich tippe mal darauf, dass der Arduino sich weghängt,
bevor das letzte Zeichen des Strings übertragen werden konnte.
Title: Re: Serial.print schneidet letztes Zeichen ab.
Post by: mkl0815 on Apr 19, 2017, 09:09 am
@DF9QA: Poste doch mal den minimalen Sketch in dem das auftritt. Der sollte ja so ähnlich aussehen wie der von combi in Post #2. Ansonsten wäre es nicht minimal. Wenn es wie be combie nicht auftritt, dann ist die Funktion in welcher der String ausgegeben wird eben NICHT die Ursache, sondern nur zufällig der Auslöser.

Mario.
Title: Re: Serial.print schneidet letztes Zeichen ab.
Post by: DF9QA on Apr 20, 2017, 02:02 am
Das Problem konnte gefunden und gelöst werden. Der VisualMicro Debugger schneidet unter bestimmten Voraussetzungen das letzte Zeichen beim Serial.print() ab.

VisualMicro hat das in der letzten Version gefixt: (siehe den vorletzten Punkt der Liste:)

( Visual Micro Work in progress + Download  (http://www.visualmicro.com/forums/YaBB.pl?num=1491650979) )
Title: Re: Serial.print schneidet letztes Zeichen ab.
Post by: combie on Apr 20, 2017, 09:55 am
Danke, für die Klarstellung.