- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 17

Thema: Softwaretest mit Code Optimierung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Hallo Peter,
    ich wollt mich nochmal bedanken, für die zusätzlichen Informationen.

    Ich habe tatsächlich noch ein Problem gefunden. Ich habe eine "Inkontinenz" Inkonsistenz in meinem Code gefunden.
    Im Header habe ich einen 32 Bit und in C-Code Modul einen 16 Bit Wert declariert/definiert. Das merkt der Compiler nicht und beim IAR-Compiler wird funktioneller Code erzeugt
    der Gnu-Compiler hingegen erzeugt nicht funktionellen Code. Eindeutig meine Schuld , aber so unterschiedlich kann der erzeugte Code durch einen anderen Compiler halt werden.

    Obwohl die Sourcen im Projekt zur Verfügung stehen, guckt der Compiler sie sich nicht an und damit gibt es auch kein Warning. Schade eigentlich.


    Datei: FlowCalc.h
    extern volatile U32 flowfactor;

    Datei: FlowCalc.c
    U16 flowfactor = 256;

    mir fällt jetzt auch nichts ein, wie man solche Fehler vermeiden kann.
    Geändert von Siro (13.12.2015 um 16:00 Uhr)

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    19.05.2015
    Beiträge
    69
    Hallo Sisor,

    kann es sein, dass Du FlowCalc.h nicht in FlowCalc.c inkludierst?

    Also der GCC schreit normalerweise (oder spätestens bei -Wall) wenn eine Variable zuvor anders deklariert wurde, als sie dann später definiert wird.

    Gruss
    Chris

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Zitat Zitat von botty Beitrag anzeigen
    kann es sein, dass Du FlowCalc.h nicht in FlowCalc.c inkludierst?
    Chris
    Das kann nicht nur sein, sondern das ist so....

    Wenn ich aus einer H-Datei nix brauche, includiere ich sie niemals. Sollte man das tun ?

    Vielen Dank für den Hinweis Chris

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    19.05.2015
    Beiträge
    69
    Was man immer macht, ist, dass man eine Include-Datei, in die zugehörige C-Datei inkludiert.
    In Deinem Beispiel also FlowCalc.h in FlowCalc.c, eben genau um solche Fehler aufzudecken (Ich selbst habe den IAR-Compiler noch nie benutzt, aber auch der sollte dann meckern.).

    Ausserdem schreibt man in eine H-Datei immer Guards, für den Fall das man aus Versehen sie mehrmals inkludiert - was ohne Guards wieder zu Fehlermeldungen führt.

    Also fuer FlowCalc.h:

    Code:
    #ifndef _FlowCalc_h_
    #define _FlowCalc_h_
    
    /* Hier kommen jetzt alle defines, Deklarationen etc. */
    
    #endif

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Was man immer macht, ist, dass man eine Include-Datei, in die zugehörige C-Datei inkludiert.
    Das habe ich bisher nur gemacht, wenn es wirklich nötig war und dann habe ich die entsprechenden "Guards" gesetzt.
    Wuste garnicht, dass die so heissen.

    Okay, dann werde ich meinen Stil ab jetzt ändern, damit der Compiler mögliche Konflikte auch aufdecken kann.
    Man lernt nie aus. Ich danke Dir.

    Siro

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo Chris,
    Zitat Zitat von Siro Beitrag anzeigen
    Das kann nicht nur sein, sondern das ist so....

    Wenn ich aus einer H-Datei nix brauche, includiere ich sie niemals. Sollte man das tun ?
    Du musst das so betrachten.

    1. Man schreibt irgendein Modul, welches teilweise Funktionen bereit stellt, welche aus anderen Modulen benutzt werden können.
    2. Man schreibt zu diesem Modul eine Header-Datei, welche alles enthält, was zum externen Aufruf benötigt wird. Also natürlich die Funktionen, aber auch öffentliche Konstanten und Variablen-Konstrukte.
    3. Überall wo dann dieses Modul verwendet werden soll, wird die Header-Datei includiert.
    4. Damit der Compiler auch überprüfen kann, dass Header und Modul zusammenpassen, includiert man diese auch im Modul!
    5. Alle Funktionen welche in dem Modul nicht öffentlich sein sollen, declariert man als static, dann kann diese auch der Linker nicht finden und man darf die selben Namen auch in einem anderen Modul verwenden.

    So wird der Code auch für andere übersichtlicher, besonders wenn man etwas anpassen muss:
    Alle Funktionen und Variablen welche als static deklariert sind, kann man problemlos anpassen ohne auf Aufrufe aus anderen Modulen acht geben zu müssen.
    Alles was öffentlich verwendet wird ist in der Header-Datei und der Compiler kann überprüfen ob es passt.

    MfG Peter(TOO)
    Manchmal frage ich mich, wieso meine Generation Geräte ohne Simulation entwickeln konnte?

Ähnliche Themen

  1. PROGMEM und Optimierung
    Von Ceos im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 09.10.2013, 07:15
  2. BASCOM Code-Optimierung - Was tut sich genau?
    Von Thomas E. im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 03.02.2012, 19:17
  3. Code Optimierung für Interrupt möglich?
    Von erik_wolfram im Forum C - Programmierung (GCC u.a.)
    Antworten: 15
    Letzter Beitrag: 13.09.2011, 22:21
  4. [ERLEDIGT] Fehler im Code? Optimierung nicht optimal? überfordert!
    Von erik_wolfram im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 30.03.2011, 17:27
  5. Code Optimierung
    Von Siro im Forum C - Programmierung (GCC u.a.)
    Antworten: 10
    Letzter Beitrag: 19.08.2010, 22:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test