- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: Softwaretest mit Code Optimierung

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    Zitat Zitat von Siro Beitrag anzeigen
    Jetzt, wo Du es so erklärst, fällt auch bei mir der Groschen (Centweise )
    Dann bist du jetzt reich

    Es gibt noch weitere Optimierungen, das wird dann auch die Reihenfolge der Befehle umgestellt, z.B. um die FPU besser auszunutzen, kann man, während die FPU gerade rechnet noch ein paar Integer-Befehle abarbeiten. Das hängt dann aber sehr von der CPU-Architektur ab. Bei manchen RISC-CPUs geht das so weit, dass das Return einer Subroutine VOR dem letzten Befehl stehen muss!

    Grundsätzlich muss man bei Funktionen, welche direkt I/Os bedienen mit der Optimierung sehr genau aufpassen! :Strom
    Meistens ist es am Besten diese separat auszulagern und ohne Optimierung zu übersetzen.
    Andernfalls kann schon eine neue Version des Compilers, mit verbesserter Optimierung, zu einem anderen Timing, und folglich zu Fehlern, führen.

    Noch etwas grundsätzliches zur Funktion eines Compilers:
    Zuerst wird eine lexikalische Prüfung vorgenommen, dabei wird im Prinzip die Rechtschreibung überprüft.
    Anschliessend folgt die syntaktische Prüfung, bei welcher festgestellt wird ob aus den Wörtern auch gültige Sätze gebildet wurden.
    Anschliessend bildet man eine Baumstruktur, welche den logischen Programmablauf darstellt und eigentlich Sprachunabhängig ist.
    Diesen Sprachabhängigen Teil nennt man Front End.

    An diesem Baum erfolgt dann die erste Optimierung, wie z.B. das wegoptimieren von unnötigen Variablen-Zugriffen und totem Code.

    Der Code-Generator (Back End) erzeugt dann aus dem Baum den eigentlichen Maschinencode. Dieser Teil ist dann CPU spezifisch.
    Hier wird dann weiter optimiert, vor allem da hin gehend, dass man viel benutzte Variablen möglichst in einem Register behält und erst am Ende der Berechnung in den Speicher schreibt (volatile verhindert auch diese Optimierung).
    Weitere Optimierungen sind z.B. bei einer Multiplikation mit 2, das Ersetzen durch eine Addition oder einen Links-Shift, je nachdem was halt schneller ist.

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

  2. #12
    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)

  3. #13
    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

  4. #14
    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

  5. #15
    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

  6. #16
    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

  7. #17
    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?

Seite 2 von 2 ErsteErste 12

Ä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
  •  

Solar Speicher und Akkus Tests