Programmiererfehler, oder Sprachfeature?



  • Hallo,

    bin in einem Programm für einen Mikrokontroller in Ansi-C (99) über ein Konstrukt gestolpert, welches ich einfach nicht verstehe:

    int x;
    
    // einige Berechnungen mit x folgen hier
    
    if (x < 0)
      x = x;
    

    Natürlich wird vor der if-Abfrage noch mit x gerechnet. Dieses taucht in dem Programm an einigen Stellen auch mit anderen Variablen auf. Beim debuggen sieht man, wie erstaunlich ;), keine Änderung an x. Meine erste Vermutung war, dass diese Zeilen nur drin sind um einen Breakpoint zu setzen. Fände ich aber auch irgendwie komisch.

    Hat von Euch vielleicht jemand eine Idee wofür dies gemacht wird?

    Vielen Dank und Gruß
    J.



  • Ich könnte mir vorstellen (wegem dem < 0), dass das eigentlich x = -x heißen soll.

    EDIT: Wenn das an mehreren Stellen auftaucht, wird es warscheinlich kein Schreibfehler sein.



  • 😕
    Wenn ich mir den Code im debuger so anschaue, dann scheint es, dass es beim Copilieren rausoptimiert wurde. D.h. es hat keinen Einfluss auf denn Programmablauf.
    An solchen stellen sollte der Entwicker wenigstens einen Kommentar hinterlassen...



  • Vielen Dank für die schnellen Antworten!

    @Binggi: Dachte ich auch, aber bei dem Kompiler für den Mikrokontroller ist es definitiv nicht weg-optimiert worden. Vielleicht ist es auch einfach eine Kompiler-spezifische Sache, aber in der Beschreibung konnte ich erstmal nichts finden.
    Leider ist der ganze Code schlecht/nicht kommentiert. Daher war ich mir auch nicht sicher ob ich es einfach ignorieren kann oder ob etwas interessantes passiert.



  • Auch ander machen Fehler, Code/Software wachst, nicht alles ist ideal, ... was fuer Gruende willst du denn? Willkommen in der realen Welt!



  • Ich nehm mal an, du hast den Code nicht 1:1 kopiert (Variablenname x??). Ist die Variable vielleicht volatile oder dergleichen? Du bist da ja auch einem μC unterwegs, steht die Variable für irgendwas spezielles, einen Port, ein Register oder sowas?



  • @Bashar: Guter Punkt! Allerdings ist es eine normale globale Variable. Sie ist weder volatile noch ein Register oder ähnliches. Wie schon gesagt, diese Zuweisung wird an verschiedenen Stellen und verschiedenen Variablen gemacht. Bei einer habe ich gesehen, dass sie im "short address memory" liegt. Dieser kann besonderes schnell zugegriffen werden.
    Bei allen Stellen die ich bisher gefunden habe, ist die Gemeinsamkeit, dass es sich um "signed int" handelt. Habe ich wohl bisher noch nicht gesagt 😞 !

    Scheinbar muß ich es tatsächlich unter der Rubrik "Manche/viele? Entwickler machen sich halt keine Gedanken beim entwickeln" ablegen und ignorieren.

    Vielen Dank für Eure Unterstützung!!!



  • Sieht für mich auch so aus, als dient das dazu, einen Breakpoint zu definieren, wenn das Ergebnis < 0 wird. Vermutlich wollt der Programmierer damit seinen Algorithmus testen und solange "optimieren" bis x nicht mehr negativ werden kann.

    Aber wie gesagt, reine Spekulation meinerseits.



  • Wenn du irgendwelche Merkwürdigkeiten deines µC oder Compiler vermutest, dann frag doch mal bei http://www.mikrocontroller.net/ nach.
    Dann gib aber auch gleich deinen Compiler (Name, Version) und den µC mit an.


Anmelden zum Antworten