seltsame Fehlermeldung beim Kompilieren mit IDE Arduino1.6.5

Programmierung und Hardwaredesign mit Arduino, AVR, PIC und Konsorten.

Moderatoren: MaxZ, ebastler, SeriousD

Antworten
Benutzeravatar

Thread-Ersteller
L_B_S
Beiträge: 531
Registriert: Fr 24. Jul 2015, 10:13
Schule/Uni/Arbeit: KFZ-Elktr.
Hat sich bedankt: 19 Mal
Danksagung erhalten: 23 Mal

seltsame Fehlermeldung beim Kompilieren mit IDE Arduino1.6.5

Beitrag von L_B_S »

Hallo zusammen,

folgendes Prog habe ich compiliert bzw, versucht zu compilieren mit der IDE Arduino 1.6.5

Code: Alles auswählen

String Text;

const int CS   = 7;   // LOAD (CS) = Aktivierung des MAX7219
const int Takt = 2;   // CLK = Taktpin des MAX7219
const int data = 8;   // DIN = Datenpin des MAX7219

void setup()
{
  pinMode(CS,   OUTPUT);
  pinMode(Takt, OUTPUT);
  pinMode(data, OUTPUT);
}

void loop()
{
   Text = "01234567";
   Set_MAX72_String(Text);
}

//====================================================
void Set_MAX72_String(String Zeichenkette)
//====================================================
     //vorher  Code B Font  Modus setzen
     // nur Ziffern 0-9 ; '-' 'E' 'H' 'L' 'P' und blank möglich
     {
     Zeichenkette =  Zeichenkette + "        "; // mit Leerzeichen rechts auffüllen 
 
     byte Digit;
     byte Zeichenwert;
     byte Ausgabewert = 0x0F;

     // alle Digit's vorher auf 'blank' setzen
     for (Digit = 7; Digit > -1; Digit--)
         {
           //Ausgabewert an Stelle ,Digit, ausgeben
           // Adresse des Steuerregister Digit 0 (= 1 Stelle) ist 0x01
           digitalWrite(CS, LOW);
           shiftOut(data,Takt, MSBFIRST, Digit);  shiftOut(data, Takt, MSBFIRST, Ausgabewert); 
           digitalWrite(CS, HIGH);
         }
     }
dann kommt folgende Fehlermeldung
Fehler.jpg
Fehler.jpg (47.74 KiB) 3191 mal betrachtet
ändere ich die Programmzeile

Code: Alles auswählen

Zeichenkette =  Zeichenkette + "        "; // mit Leerzeichen rechts auffüllen 
in

Code: Alles auswählen

Zeichenkette =  "        "; // mit Leerzeichen rechts auffüllen
wird es ohne Fehlermeldung kompiliert

Compiliere ich das Prog mit der IDE Arduino 1.0.5. wird es auch mit dieser Zeile

Code: Alles auswählen

Zeichenkette =  Zeichenkette + "        "; // mit Leerzeichen rechts auffüllen 
ohne Fehlermeldung compiliert

Was läuft denn da verkehrt ? Ich kann mir das einfach nicht erklären. :roll:

Gruss
Ludwig

Nachtrag: sobald ich die Zeile

Code: Alles auswählen

shiftOut(data,Takt, MSBFIRST, Digit);  shiftOut(data, Takt, MSBFIRST, Ausgabewert); 
auskommentiere, funktioniert es wieder ohne Fehlermedung. Ob das damit im Zusammenhang steht ??? :|
Benutzeravatar

Paul
Admin
Beiträge: 3595
Registriert: So 7. Aug 2005, 14:34
Schule/Uni/Arbeit: HW/SW-Entwickler
Wohnort: Braunschweig
Hat sich bedankt: 632 Mal
Danksagung erhalten: 210 Mal
Kontaktdaten:

Re: seltsame Fehlermeldung beim Kompilieren mit IDE Arduino1

Beitrag von Paul »

Ööööööhmmm. Du kannst keine Strings addieren, das gibt die Syntax von C/C++ nicht her. ^^

Der folgende Code legt die Stringkonstante "irgendwas" im Speicher ab und weist Zeichenkette die Adresse der ersten Speicherzelle dieser Konstante zu.

Code: Alles auswählen

Zeichenkette = "irgendwas";
Der folgende Code hingegen zerschießt dir das Programm (bzw. verwirrt es vorher den Linker "ld.exe" damit), denn hier konkatenierst du nicht zwei Strings, sondern du addierst zwei POINTER! (Zeichenkette = Adresse auf sich selbst + Adresse deiner Stringkonstante ==> Zeigt ins Nirvana bzw. auf irgendeinen Müll)

Code: Alles auswählen

Zeichenkette =  Zeichenkette + "irgendwas";
Probier's mal hiermit:

Code: Alles auswählen

char buffer[100] = { 0 };
strcpy(buffer, "Mein Start-String");
strcat(buffer, "        "); // mit Leerzeichen rechts auffüllen
“With great power come great heat sinks.”
paulwilhelm.de -- mosfetkiller.de
Benutzeravatar

Thread-Ersteller
L_B_S
Beiträge: 531
Registriert: Fr 24. Jul 2015, 10:13
Schule/Uni/Arbeit: KFZ-Elktr.
Hat sich bedankt: 19 Mal
Danksagung erhalten: 23 Mal

Re: seltsame Fehlermeldung beim Kompilieren mit IDE Arduino1

Beitrag von L_B_S »

Danke, erst einmal

das hier habe ich aus einer Arduino-Referenz übernommen von hier https://www.arduinoforum.de/referenz.php
Ref.jpg
oder habe ich das nur verkehrt interpretiert ?
hier z.Bsp. wird ein String mit Stringkonstanten verbunden und das ergibt keine Fehlermeldung von der IDE. Das verstehe ich nicht.

Code: Alles auswählen

String Zeichenkette;
String Z;
String A;
char myChar;

void setup()
{

}

void loop()
{
Z = "12345";  
Zeichenkette = Z + "        ";
}
Ob das allerdings dann richtig compiliert wird , hab ich noch nicht probiert

Gruss
Ludwig
Benutzeravatar

Paul
Admin
Beiträge: 3595
Registriert: So 7. Aug 2005, 14:34
Schule/Uni/Arbeit: HW/SW-Entwickler
Wohnort: Braunschweig
Hat sich bedankt: 632 Mal
Danksagung erhalten: 210 Mal
Kontaktdaten:

Re: seltsame Fehlermeldung beim Kompilieren mit IDE Arduino1

Beitrag von Paul »

Upsi, achso... ^^* War mir nicht bekannt.

Dann vergiss bitte, was ich gesagt habe ... dann habe ich auch keine Ahnung.
Aber du kannst es ja trotzdem mal auf "meine" Art probieren und rückmelden, ob wenigstens das funktioniert hat. ;)

Viele Grüße
Paul
“With great power come great heat sinks.”
paulwilhelm.de -- mosfetkiller.de
Benutzeravatar

Thread-Ersteller
L_B_S
Beiträge: 531
Registriert: Fr 24. Jul 2015, 10:13
Schule/Uni/Arbeit: KFZ-Elktr.
Hat sich bedankt: 19 Mal
Danksagung erhalten: 23 Mal

Re: seltsame Fehlermeldung beim Kompilieren mit IDE Arduino1

Beitrag von L_B_S »

Hallo Paul,
habe deinen Code mal eingebaut.

Code: Alles auswählen

String Text;

const int CS   = 7;   // LOAD (CS) = Aktivierung des MAX7219
const int Takt = 2;   // CLK = Taktpin des MAX7219
const int data = 8;   // DIN = Datenpin des MAX7219

void setup()
{
  pinMode(CS,   OUTPUT);
  pinMode(Takt, OUTPUT);
  pinMode(data, OUTPUT);
}

void loop()
{
   Text = "01234567";
   Sent_MAX72_Sg(Text);
}

//====================================================
void Sent_MAX72_Sg(String Zeichenkette)
//====================================================
     {
     char buffer[100] = { 0 };
     strcpy(buffer, "01234567");
     strcat(buffer, "        "); // mit Leerzeichen rechts auffüllen

     //vorher  Code B Font  Modus setzen
     // nur Ziffern 0-9 ; '-' 'E' 'H' 'L' 'P' und blank möglich
    
     //Zeichenkette = Zeichenkette + "        "; // mit Leerzeichen rechts auffüllen 
     
     unsigned char Zeichen;
     byte Digit;
     byte Zeichenwert;
     byte Ausgabewert;

     // alle Digit's vorher auf 'blank' setzen
     
     for (Digit = 7; Digit > -1; Digit--)
         {
         switch (Zeichenwert)
           {
           case 32:  // Space (blank)
                Ausgabewert = 0x0F; break;
   
           default:     // wenn nichts zutrifft, blank ausgeben
                Ausgabewert = 0x0F; break;
           }
           
           //Ausgabewert an Stelle ,Digit, ausgeben
           // Adresse des Steuerregister Digit 0 (= 1 Stelle) ist 0x01
           digitalWrite(CS, LOW);
           shiftOut(8, 2, MSBFIRST, Digit);  shiftOut(8, 2, MSBFIRST, Ausgabewert); 
           digitalWrite(CS, HIGH);
          
         }
        
     }
Kann aber buffer[] in der Form keinen String zuweisen wie z.Bsp. hier:

Code: Alles auswählen

strcpy(buffer, Zeichenkette);
daher habe ich das zum testen das mal so umgangen

Code: Alles auswählen

strcpy(buffer, "01234567");
allerdings tritt auch da die gleiche Fehlermeldung auf und das schon beim Verifizieren.
Was mich stark verwundert ist eben, dass , wenn ich das hier auskommentiere:

Code: Alles auswählen

shiftOut(8, 2, MSBFIRST, Digit);  shiftOut(8, 2, MSBFIRST, Ausgabewert); 
die Fehlermeldung ausbleibt. Und ebenso bei der IDE 1.0.5 Sehr , sehr seltsam.
Benutzeravatar

Heisath
Beiträge: 539
Registriert: Mi 26. Jun 2013, 15:44
Hat sich bedankt: 33 Mal
Danksagung erhalten: 81 Mal
Kontaktdaten:

Re: seltsame Fehlermeldung beim Kompilieren mit IDE Arduino1

Beitrag von Heisath »

Hi,

dein Code ist auf jeden Fall richtig, konnte den problemlos kompilieren (allerdings habe ich Visual Micro benutzt).

Glaube auch nicht, dass es irgendwie am Code hängt, weil dann sollte eine vernünftige Fehlermeldung kommen. Aber das compilieren
selbst klappt ja, am Linken scheitert es (ld.exe ist der Linker, siehe dazu auch den C Programm Erstellungsfluss)...

Ich vermute, dass da irgendeine Bibliothek (Komponente von shiftOut) nicht gelinkt werden kann. Vermutlich ein Bug
im Arduino Buildenvironment. Das würde auch erklären warum es mit einer alten Version geht.

Ansonsten als Lösungsvorschläge:
- mal die IDE als Administrator ausführen (das Problem hatte ich mal, scheiterte da auch am Linker)
- oder mal ein aktuelles Betriebssystem installieren, wenn man aktuelle Programme ausführen will. (wenn ich das richtig sehe ist das XP?)

lg,
count-doku
Benutzeravatar

Thunderbolt
Beiträge: 2869
Registriert: Fr 7. Apr 2006, 14:05
Spezialgebiet: Physik,Elektronik,Blender
Schule/Uni/Arbeit: M.Sc ET, Hardwareentwickler
Wohnort: 65366 Geisenheim (Hessen)
Hat sich bedankt: 1 Mal
Danksagung erhalten: 70 Mal
Kontaktdaten:

Re: seltsame Fehlermeldung beim Kompilieren mit IDE Arduino1

Beitrag von Thunderbolt »

Soweit ich weiß ist die "XYZ hat ein problem festgestellt und muss beendet werden"-Fehlermeldung das Windows-Äquivalent zum SEGFAULT unter Linux, kann also sein, dass der linker intern irgend 'n problem hat, vllt mal 'ne neuere / ältere version von der toolchain benutzen?
Benutzeravatar

Thread-Ersteller
L_B_S
Beiträge: 531
Registriert: Fr 24. Jul 2015, 10:13
Schule/Uni/Arbeit: KFZ-Elktr.
Hat sich bedankt: 19 Mal
Danksagung erhalten: 23 Mal

Re: seltsame Fehlermeldung beim Kompilieren mit IDE Arduino1

Beitrag von L_B_S »

Count-Doku hat geschrieben:Hi,......
Ich vermute, dass da irgendeine Bibliothek (Komponente von shiftOut) nicht gelinkt werden kann. Vermutlich ein Bug
im Arduino Buildenvironment. Das würde auch erklären warum es mit einer alten Version geht.
das gerade ist es ja, was ich nicht so recht verstehe. Dieser Code z.Bsp.:

Code: Alles auswählen

//====================================================
void Set_MAX72_blank()
//====================================================
      // Display Elemente auf blank setzen, Adresse des Steuerregister = 0x01 bis 0x08 
{
     for(int i=1;i<9;i++)
        {
        digitalWrite(CS, LOW); 
        shiftOut(data, Takt, MSBFIRST,i); shiftOut(data, Takt, MSBFIRST, 0x0F); 
        digitalWrite(CS, HIGH);
        }
ergibt keine Fehlermeldung und ist auch mit IDE 1.6.5. compiliert. shiftOut wird anscheinend richtig compiliert und arbeitet wie es soll. Hab's an der Hardware ausprobiert. Funktioniert tadellos, also muss shiftOut richtig compiliert sein.
Count-Doku hat geschrieben: - oder mal ein aktuelles Betriebssystem installieren, wenn man aktuelle Programme ausführen will. (wenn ich das richtig sehe ist das XP?)
Ja, XP (sieht man das irgend wo ? :shock: ). Will aber aus bestimmten Gründen kein anderes BS installieren.
Naja, wenn noch jemand einen Tip hat.....
Benutzeravatar

Heisath
Beiträge: 539
Registriert: Mi 26. Jun 2013, 15:44
Hat sich bedankt: 33 Mal
Danksagung erhalten: 81 Mal
Kontaktdaten:

Re: seltsame Fehlermeldung beim Kompilieren mit IDE Arduino1

Beitrag von Heisath »

Naja wenn du schon ein Steinzeitbetriebssystem nutzt, nimm doch vielleicht auch einfach die alte Version von der IDE - wenn da eh alles geht ;)
Benutzeravatar

gamerpaddy
Beiträge: 2624
Registriert: Mo 13. Aug 2012, 09:03
Spezialgebiet: Spezialgebiet
Schule/Uni/Arbeit: Schule/Uni/Arbeit
Wohnort: Mannheim
Hat sich bedankt: 33 Mal
Danksagung erhalten: 303 Mal
Kontaktdaten:

Re: seltsame Fehlermeldung beim Kompilieren mit IDE Arduino1

Beitrag von gamerpaddy »

Mit der version 1.8.5 compiled er auch ohne probleme.
da wird wohl der wurm in einer der compiler-programmdateien der 1.6.5 ide sein, nichts was man mit dem arduino code richten könnte.

1.8.7 ist die aktuellste version und noch mit windows xp kompatibel.
https://www.arduino.cc/en/main/software

bekanntes problem unter xp und IDE 1.6.5 (mit alter avr-gcc/avrdude version)
https://forum.arduino.cc/index.php?topic=313442.0

Anscheinend hilft es, einige unnötige globale variablen hinzuzufügen die garnicht im Code verwendet werden.
:wurst:
Benutzeravatar

Thread-Ersteller
L_B_S
Beiträge: 531
Registriert: Fr 24. Jul 2015, 10:13
Schule/Uni/Arbeit: KFZ-Elktr.
Hat sich bedankt: 19 Mal
Danksagung erhalten: 23 Mal

Re: seltsame Fehlermeldung beim Kompilieren mit IDE Arduino1

Beitrag von L_B_S »

@Count-Doku
@gamerpaddy

Moin und Danke erst einmal,
hab mir die IDE 1.8.7. heruntergeladen und installiert. Und siehe da, es funktioniert. Kann doch keiner ahnen, dass die 1.6.5 :haufen: ist

Zum Steinzeitbetriebssystem, das hat, wie schon gesagt, seinen Grund. Es laufen dort einige selbst erstellte Progamme, die wichtig für mich sind und deren Umstellung auf ein anderes BS sehr aufwändig wäre. Irgentwann kommt der Tag, wo ich das machen muss aber im Moment muss es noch "durchhalten".

Gruss
Ludwig
Antworten