AVR Inline-Optimierung

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

AVR Inline-Optimierung

Beitragvon Mathias » 28. Okt 2017, 16:49 AVR Inline-Optimierung

Wen ich folgenden Test mache, verbraucht ein Aufruf einer Inline-Procedure mehr Speicher als wen man dies selbst direkt reinschreibt.
Code: Alles auswählen
  procedure sei; assembler; inline;
  asm
           Sei
  end;


Code: Alles auswählen
begin
  Sei;  // Braucht 8 Byte
  asm cli end; // Braucht 2 Byte;
end.

Ich dachte immer, wen man eine Procedure, vor allem eine mit assembler, werde direkt in den Haupt-Code kompiliert.

Somit empfiehlt es sich, es selbst direkt in den Code zu schreiben, vor allem bei so was einfachen wie cli und sei.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3195
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 28. Okt 2017, 18:45 Re: AVR Inline-Optimierung

Auch hier wieder der Verweis auf die *.s-Dateien.

Code: Alles auswählen
.section .text.n_gh_init_ss_cli
.globl   GH_INIT_ss_CLI
GH_INIT_ss_CLI:
   cli
   ret
.Le0:
   .size   GH_INIT_ss_CLI, .Le0 - GH_INIT_ss_CLI
 
.section .text.n_gh_init_ss_sei
.globl   GH_INIT_ss_SEI
GH_INIT_ss_SEI:
   sei
   ret
.Le1:
   .size   GH_INIT_ss_SEI, .Le1 - GH_INIT_ss_SEI


Ja, die Prozeduren werden als solche abgelegt und mit call und return abgerufen. Was auch noch den Nachteil hat, dass sie 7 zusätzliche Takte für Einsprung und Rückkehr benötigen.

Direktes Schreiben des Inline-Assemblers in andere Prozeduren kann aber auch den Nachteil haben, dass der Compiler einen Haufen Register- und Stackpointersicherung extra betreibt und die Prozedur aufbläht. Trifft bei Dir nicht zu, weil da nichts drumrum ist, was er sichern müsste.

Ich bin da noch nicht ganz dahintergestiegen, wann was günstiger ist.
Timm Thaler
 
Beiträge: 431
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Mathias » 28. Okt 2017, 18:51 Re: AVR Inline-Optimierung

Auch hier wieder der Verweis auf die *.s-Dateien.
Woher nehmen und nicht stehlen.
Hier ./lib/avr-embedded kann ich keine finden, dort hat es nur 2 Dateien.

./lib/avr-embedded/Project1.compiled
./lib/avr-embedded/Project1.o

Ich bin da noch nicht ganz dahintergestiegen, wann was günstiger ist.
Könnte sein, das der AVR-Compiler noch stark in der Beta ist ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3195
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 28. Okt 2017, 22:12 Re: AVR Inline-Optimierung

Bei den benutzerdefinierten Compilereinstellungen
-Cpavr5
-Wpatmega328p
-al
stehen?
Timm Thaler
 
Beiträge: 431
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon kupferstecher » 29. Okt 2017, 10:37 Re: AVR Inline-Optimierung

Nach meiner Beobachtung funktioniert "inline" nur bei normalen Routinen und nicht bei Assembler-Routinen. Ist vermutlich einfach nicht implementiert.

Cli und Sei sind zwar wichtig, aber die paar Takte extra dürften kaum kritisch sein.
kupferstecher
 
Beiträge: 67
Registriert: 17. Nov 2016, 11:52

Beitragvon Mathias » 29. Okt 2017, 16:44 Re: AVR Inline-Optimierung

Timm Thaler hat geschrieben:Bei den benutzerdefinierten Compilereinstellungen
-Cpavr5
-Wpatmega328p
-al
stehen?

Dank dem -al gibt es eine *.s .

Für was hast du noch den Parameter -Cpavr5 eingetragen ?
Ich habe/hatte bei mir nur -Wpatmega328p.

Das mit dem -al werde ich noch im Tutorial erste Schritte ergänzen, ich denke dies ist recht nützlich.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3195
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Timm Thaler » 29. Okt 2017, 17:32 Re: AVR Inline-Optimierung

Wenn Du rechts daneben auf "Alle Einstellungen" klickst, bekommst Du ein Fenster, was da alles einstellbar ist.

a heisst, dass Assembler-File (die *.s) wird nicht gelöscht. al heisst, die Zeilenzahlen aus dem Sourcecode stehen im Assemblerfile, das hilf die Stelle schneller zu finden.
Timm Thaler
 
Beiträge: 431
Registriert: 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.6 FPC3.0.0, Raspbian Jessie Laz1.6 FPC3.0.0 | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon Mathias » 29. Okt 2017, 17:41 Re: AVR Inline-Optimierung

Ich habe mal versucht, für ATtiny dem Parameter -Cpavr25 und -WpATTINY2313A einzutragen.
Dies bringt nicht, wen der Cross-Compiler mit 5 kompiliert wurde.
Ich dachte schon, man könnte sich die Umkomplierung mit fpcupdelux sparen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 3195
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

• Themenende •

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried