Forum: Mikrocontroller und Digitale Elektronik Bitte um Hilfe: Ich finde die Ursache der komischen Fehler nicht.


von Alex (haidanai)


Angehängte Dateien:

Lesenswert?

Hallo,

Bei einem größeren Projekt mit SAMD21E und AT Studio 7 lies sich bis vor 
Kurzem das Programm ohne Fehler übersetzen. Nach einigen 
(unverdächtigen) Änderungen wirft der Linker auf einmal komische 
Fehlermeldungen aus - siehe Anhang.
Weil ich schonmal in der .h den Strichpunkt hinter einer Funktion 
vergaß,
weiß ich was für eine Flut an seltsamen Meldungen aufpoppen, nur wegen 
winziger Fehler.
Sowas vermute ich auch, habe aber schon die ganzen Differenzen zur 
fehlerfreien Version gecheckt. Die sind alle unverdächtig.
Weiß jemand irgend was, wo ich suchen könnte?

von Jim M. (turboj)


Lesenswert?

Das ist die benötigte Infrastruktur für einen printf() function call. 
Mach den mal raus.

Ansonsten probiere mal "-lnosys" als Linker Option...

von Udo S. (urschmitt)


Lesenswert?

Alex schrieb:
> Sowas vermute ich auch, habe aber schon die ganzen Differenzen zur
> fehlerfreien Version gecheckt. Die sind alle unverdächtig.

Dann suche systematisch. Immer nur eine Änderung und übersetzen.

von Ein T. (ein_typ)


Lesenswert?

Udo S. schrieb:
> Alex schrieb:
>> Sowas vermute ich auch, habe aber schon die ganzen Differenzen zur
>> fehlerfreien Version gecheckt. Die sind alle unverdächtig.
>
> Dann suche systematisch. Immer nur eine Änderung und übersetzen.

"git bisect" kann helfen, daß man nicht jede einzelne Änderung testen 
muß.

von Alex (haidanai)


Lesenswert?

> Ansonsten probiere mal "-lnosys" als Linker Option...
Wie stellt man das im AT Studio ein?
Unter Project-Properties-Linker-???

> "git bisect" kann helfen, daß man nicht jede einzelne Änderung testen
muß.
Danke schonmal. Werde ich ausprobieren.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Alex schrieb:
> Bitte um Hilfe: Ich finde die Ursache der komischen Fehler nicht.
Finde ich auch nicht.

Und ich habe wirklich gesucht.
Mehrfach.

Alex schrieb:
> Sowas vermute ich auch, habe aber schon die ganzen Differenzen zur
> fehlerfreien Version gecheckt. Die sind alle unverdächtig.

Was soll mir das Wort "unverdächtig" in diesem Zusammenhang sagen?

von Peter D. (peda)


Lesenswert?

Alex schrieb:
> habe aber schon die ganzen Differenzen zur
> fehlerfreien Version gecheckt. Die sind alle unverdächtig.

Dann nimm die fehlerfreie Version, ob sie weiterhin fehlerfrei 
compiliert.
Und dann füge die Änderungen nacheinander ein.

von Alex (haidanai)


Angehängte Dateien:

Lesenswert?

ok, mit "-lnosys" als Linker Option kommen jetzt zusätzliche Meldungen 
-Anhang.

von Alex (haidanai)


Lesenswert?

Oh mann,
mein EntwicklungsleiDer hat Configuration "Debug" und "Release" 
eingerichtet.
Wenn ich auf Debug stelle, kommen die komischen Fehler, wenn ich auf 
Release gehe, sind sie weg.
Wie finde ich das raus???

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Alex schrieb:
> Wie finde ich das raus???
Vergleiche die Toolchain-Einstellungen und Parameter für diese beiden 
Makepfade.

von Sebastian S. (amateur)


Lesenswert?

Wohl dem, der eine Revisionsverwaltung hat und diese auch nutzt.

Die gibt es für lau im Netz und wenn man will, kann man jederzeit den 
"Rückwärtsgang" einlegen.
Natürlich muss man sich angewöhnen diese auch zu nutzen und dann - "Oh 
wie schrecklich!" - einen Kommentar abgeben um die Änderung zu 
bezeichnen.

von Alex (haidanai)


Lesenswert?

> Wohl dem, der eine Revisionsverwaltung hat und diese auch nutzt
Ich benutze Tortoise Git!
Das git bisect hat mir nix gebracht, da ich genau weiß welche Version 
ging
und bei der Nächsten ging es nicht mehr...

von Flunder (flunder)


Lesenswert?

Und wenn alles andere nix nützt, könnte miteinander reden vielleicht was 
bringen. Einfach mal fragen, welche Unterschiede er zwischen Debug und 
Release macht.

von Flunder (flunder)


Lesenswert?

Sebastian S. schrieb:
> Wohl dem, der eine Revisionsverwaltung hat und diese auch nutzt.
Wer die vor allem nutzt, um Änderungen von Kollegen asap rückgängig zu 
machen, hat ruckzuck andere Probleme, die git nicht lösen wird.

Ansonsten : ja, eine Versionsverwaltung und deren regelmäßiger Gebrauch 
helfen oft sehr.

von Alex (haidanai)


Lesenswert?

> Und wenn alles andere nix nützt, könnte miteinander reden vielleicht was
bringen.
Das ist kaum möglich - leider

Also kommen jetzt keine weiteren sachdienlichen Hinweise mehr?

von Wastl (hartundweichware)


Lesenswert?

Alex schrieb:
> Also kommen jetzt keine weiteren sachdienlichen Hinweise mehr?

Hast schon mal versucht alle *.obj Files im Projekt von Hand
zu löschen damit auch keine "Leichen" von der Vorgeschichte
vorhanden sind?

von Thomas Z. (usbman)


Lesenswert?

Kann es sein dass es sowas wie ein Debug_Printf gibt ev in einem Macro 
versteckt?

von Udo S. (urschmitt)


Lesenswert?

Alex schrieb:
> Das ist kaum möglich - leider

geil

Kündigen

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Alex schrieb:
> Also kommen jetzt keine weiteren sachdienlichen Hinweise mehr?

Ich unterscheide ganz gerne zwischen technischen Problemen und sozialen 
Problemen.

Soziale Probleme kann man meist dadurch bearbeiten, dass man darüber 
redet.
Und während man darüber redet, ändert sich das Problem, oder die 
Einstellung dazu ändert sich. Was beides im Endeffekt auf das gleiche 
herausläuft.
Auf technische Probleme lassen sich die sozialen Lösungsstrategien 
selten anwenden.

Bei technischen Problemen:
1. Problem analysieren
2. Lösung erarbeiten
3. Lösung durchsetzen.

Punkt 1 erfordert umfangreiche Kenntnisse über das Problem selber, über 
den Kontext.
Die Anwendung technischer Strategien, auf soziale Probleme, führen gerne 
zu gruseligen Lösungen, z.B. Guillotine, Elektrischer Stuhl usw.

War das sachdienlich?

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Hässlicher Trick: Die fehlenden Funktionen (_write etc.) als Dummy leer 
implementieren. Disassembly erzeugen und schauen wo malloc(), printf(), 
puts() etc. aufgerufen werden.

Thomas Z. schrieb:
> Kann es sein dass es sowas wie ein Debug_Printf gibt ev in einem
> Macro
> versteckt?

Wäre auch meine Vermutung. Oder: es wird assert() genutzt, welches 
standardmäßig printf() und abort() aufruft. Im Release-Build wird per 
-DNDEBUG das assert() deaktiviert.

von Alex (haidanai)


Lesenswert?

> Oder: es wird assert() genutzt, welches standardmäßig printf() und abort() 
aufruft.
Ja genau, ich habe assert() drin. Aber das hatte ich auch schon, als es 
noch keine Fehler gab. Irgend wie / wo muss man dem assert das printf 
abschalten können?

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Alex schrieb:
> Irgend wie / wo muss man dem assert das printf aqbschalten können?

Indem du eine eigene __assert_func implementierst und dort halt kein 
printf verwendest.

von Alex (haidanai)


Lesenswert?

Also, ich habe meine eigene assert() geschrieben.
Damit konnte ich mein Problem lösen.
Vielen Dank für eure Hilfe, die den wichtigen Hinweis auf printf <= 
assert
gegeben hat.
Damit ist für mich das Thema erledigt.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Alex schrieb:
> Also, ich habe meine eigene assert() geschrieben.

Achtung, da gibt es ein paar Fallen wenn man es "from Scratch" macht 
(statt z.B. die Standard-Implementierung anzupassen).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.