- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 22

Thema: Compiler Multiplikation verbieten

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
    @HaWe:

    XC8 Compiler V2.00

    t = cnt;
    0x8E: MOVF cnt, W
    0x8F: MOVWF 0x51
    0x90: MOVF 0x51, W
    cnt+=cnt;
    0x92: MOVF cnt, W
    0x93: MOVWF 0x51
    0x94: MOVF 0x51, W
    0x95: ADDWF cnt, F
    cnt+=t;
    0x96: MOVF t, W
    0x97: MOVWF 0x51
    0x98: MOVF 0x51, W
    0x99: ADDWF cnt, F
    ---------------------------
    XC8 Compiler V2.10

    t = cnt;
    0x89: MOVF cnt, W
    0x8A: MOVWF 0x51
    0x8B: MOVF 0x51, W
    0x8C: MOVWF t
    cnt+=cnt;
    0x8D: MOVF cnt, W
    0x8E: MOVWF 0x51
    0x8F: MOVF 0x51, W
    0x90: ADDWF cnt, F
    cnt+=t;
    0x91: MOVF t, W
    0x92: MOVWF 0x51
    0x93: MOVF 0x51, W
    0x94: ADDWF cnt, F
    -------------------------

    Compiler XC8 V2.20
    compiliert meinen inline Assembler Code garnicht mehr, er meckert....
    sehr merkwürdig.
    -------------------------


    übrigens: einen Wert * 3 geht auch so: Manuelle Codierung
    cnt = cnt * 3;

    asm("movf _cnt,W");
    asm("addwf _cnt,F");
    asm("addwf _cnt,F");

    man benötigt nichteinmal eine Zwischenvariable
    Geändert von Siro (16.08.2020 um 15:07 Uhr)

  2. #2
    HaWe
    Gast
    @Siro
    und das bedeutet jetzt...was?

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Fazit:
    Man weis nicht genau was für ein Code vom Compiler erzeugt wird
    und der kann, je nach Version, auch völlig unterschiedlich ausfallen,
    was im Normalfall aber keine wirkliche Rolle spielt. Funktional sollte man sich darauf verlassen können.
    Lediglich bei sehr zeitkritischen Anwendungen und/oder wenn man Code sparen muss, sollte man sich unter Umständen den erzeugten Code mal genauer anschauen.
    Ein Garant für gleichen Code bzw. Laufzeiten bei unterschiedlichen Compiler Versionen ist nicht gegeben.

    Achja, wenn man Softwaredokumentation bzw. Abnahmen für Geräte benötigt, ist es in sicherheitsrelevanten Anwendungen
    zwingend notwendig die gesamte Entwicklungsumgebung "einzufrieren" da durch ein Update nicht sichergestellt ist,
    dass anhand der Sourcen ein identischer Code wieder hergestellt werden kann.

    Siro

  4. #4
    HaWe
    Gast
    ich meinte:
    wie ist die Performance dieses C-Codes im Vergleich zu bisherigen C-Codes, um Multiplikation zu vermeiden?

    t = cnt;
    cnt+=cnt;
    cnt+=t;

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Zur Performance habe ich nochmal einige Tests durchgeführt:
    unsigned char cnt; // 8 Bit ohne Vorzeichen

    ----------------
    cnt = (cnt << 1) + cnt;
    17 Zyklen bei XC8 V2.00
    102 Zyklen bei XC8 V2.10

    cnt*=3;
    46 Zyklen bei XC8 V2.00
    46 Zyklen bei XC8 V2.10

    HaWe-Code:
    t = cnt;
    cnt+=cnt;
    cnt+=t;

    16 Zyklen bei XC8 V2.00
    12 Zyklen bei XC8 V2.10

    Siro's Assemblercode: Compiler Version egal
    asm("movf _cnt,W");
    asm("addwf _cnt,F");
    asm("addwf _cnt,F");
    3 Zyklen

    Siro
    Geändert von Siro (18.08.2020 um 12:44 Uhr)

Ähnliche Themen

  1. Auch Hybridfahrzeuge betroffen: Großbritannien will Verbrenner ab 2040 verbieten
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 26.07.2017, 10:40
  2. Verkehr: Stadtrat in San Francisco will Lieferroboter verbieten
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 2
    Letzter Beitrag: 24.05.2017, 10:52
  3. Multiplikation falsch??
    Von fredyxx im Forum Arduino -Plattform
    Antworten: 8
    Letzter Beitrag: 20.05.2016, 10:21
  4. Multiplikation in ass
    Von haus51 im Forum Assembler-Programmierung
    Antworten: 9
    Letzter Beitrag: 20.03.2007, 13:48
  5. Vias unter Bauteilen verbieten (Eagle)
    Von Henrik hessert im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 2
    Letzter Beitrag: 16.12.2006, 18:34

Berechtigungen

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

LiFePO4 Speicher Test