Hallo,
aus Interesse wollte ich mal den C18 gegen den GCCAVR testen.
Mein Ergebnis mit Optimierung ist allerdings erschreckend.
Ich habe unter Optimierung alles ausgewählt, jedoch entspricht das Ergebnis nicht so ganz meinen Vorstellungen von eine Optimierung. Schlechteren Code kann man ja kaum noch produzieren. Was habe ich falsch eingestellt. Ich füge das Projekt mal als ZIP-Datei an.
20: while(size--) {
00EA 0E02 MOVLW 0x2
00EC CFDB MOVFF 0xfdb, 0xff3
00EE FFF3 NOP
00F0 06DB DECF 0xfdb, F, ACCESS
00F2 50F3 MOVF 0xff3, W, ACCESS
00F4 0900 IORLW 0
00F6 E015 BZ 0x122
0120 D7E4 BRA 0xea
21: *WritePtr++=*readptr++;
00F8 CFDF MOVFF 0xfdf, 0xfe9
00FA FFE9 NOP
00FC 2ADF INCF 0xfdf, F, ACCESS
00FE 0E01 MOVLW 0x1
0100 CFDB MOVFF 0xfdb, 0xfea
0102 FFEA NOP
0104 E301 BNC 0x108
0106 2ADB INCF 0xfdb, F, ACCESS
0108 50EF MOVF 0xfef, W, ACCESS
010A 6EE6 MOVWF 0xfe6, ACCESS
010C C082 MOVFF 0x82, 0xfe9
010E FFE9 NOP
0110 C083 MOVFF 0x83, 0xfea
0112 FFEA NOP
0114 2B82 INCF 0x82, F, BANKED
0116 0E00 MOVLW 0
0118 2383 ADDWFC 0x83, F, BANKED
011A 52E5 MOVF 0xfe5, F, ACCESS
011C 50E7 MOVF 0xfe7, W, ACCESS
011E 6EEF MOVWF 0xfef, ACCESS
22: }
Das war das Ergebnis. Erwartet hätte ich da eher etwas wie:
Jetzt nur die Schleife:
loop:
MOVFF POSTINC1, POSTINC2
DECFSZ Zaehler
BRA loop
Das sind 5 Zyklen gegen 20+x.