@Siro
und das bedeutet jetzt...was?
@Siro
und das bedeutet jetzt...was?
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
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;
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)
Lesezeichen