AVR Inline-Optimierung
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: AVR Inline-Optimierung
Natürlich nützt einem das was, weils oft pinkompatible Controller von anderen Herstellern gibt. Daher entsteht ja erst der günstige Preis der Cortex-M, weil es Wettbewerb gibt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Re: AVR Inline-Optimierung
AVR ist eben doch ein schöner "Kompromiss" zwischen für dem Compilerbau interessanter und relevanter Architektur, der Z80-Port juckt mich eigentlich noch mehr, aber da dürfte das Interesse relativ gering sein im Vergleich zu AVRChristian hat geschrieben:@Florian, schön zu sehn das dich der avr immernoch "juckt"


Da hat das eine nichts mit dem anderen zu tun: wenn sich jemand für einen Port interessiert und daran arbeitet, dann gibt es ihn wenn nicht, dann nicht. Es gibt keinen großen Masterplan.Mathias hat geschrieben:Aber ich hoffe trotzdem, das Lazarus für AVR weiter entwickelt wird. Es wird sogar für 8088er entwickelt, obwohl man diese nicht mal mehr kaufen kann.
Das hängt einfach von vielen Dingen ab (wie schwierig, wie einfach, wie relevant, wie interessant, wie viel Lust, natürlich alles objektiv)Timm Thaler hat geschrieben: Bisher war ich mir eher unsicher, wie intensiv Avr embedded überhaupt vorangetrieben wird. Das vor Monaten angefragte direkte Lesen von Konstanten oder Strings aus dem Flash ohne Umweg über den Sram ist meines Wissens nach nicht umgesetzt. Dazu hatte ich auch Assemblercode reingestellt.
Wie willst du was kaputt machen solange du keinen Schreibzugriff auf das Subversion-Repository hastTimm Thaler hat geschrieben:b) nix kaputtmachen.

Naja, nur dann bringt es halt auch relativ wenig. Inlining bringt dann was, wenn der Compiler sich den Stackframe sparen kann, Variablen und Konstanten direkt einsetzen, usw.kupferstecher hat geschrieben:Das gilt ja bereits für eine Assemblerfunktion. Wie gesagt, ich sehe nicht, welche zusätzlichen Anforderungen an eine Inlineassemblerfunktion zu stellen wären. Deshalb die Nachfrage.FPK hat geschrieben:Was sich während/durch eines Funktionsaufrufs ändern darf und was nicht ist normalerweise klar im ABI definiert und relativ beschränkt.
Wenn ein Feature gut durchdacht ist, dann kann es auch in den "Issue" tracker. Gibt genügend Beispiele.Wie Tim Thaler schon geschrieben hat, wo fängt ein Bug an und wo hört ein fehlendes Feature auf?Naja, ein Bugreport dauert max. 10 min, das sollte einem ein OSS-Compiler schon wert sein. Dass nicht jeder einen entsprechenden Compiler-Patch erstellen kann, ist klar, wobei das bei FPC für Pascal-Programmierer noch am einfachsten sein sollte.
Ja, u.a. an meiner ZeitHier ein Bug/Feature Request welchen ich initiiert habe. Es geht darum ob der Compiler momentan Variablenzugriffe überhaupt optimieren darf, da es an einem Volatile-Konzept fehlt.
https://bugs.freepascal.org/view.php?id=32721
Das aber nur als Beispiel, es fehlt halt noch an mehreren Ecken.


-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: AVR Inline-Optimierung
Bin wieder zurück und kann nur wiederholen: Ich bringe meine Erfahrung in Asm auf AVR gern da ein, weil ich da a) Potenzial sehe (auch wegen Arduino) und b) eine durchaus brauchbare Alternative zu C. Ich bräuchte halt eine Einführung, wie man sowas implementiert, ohne allzuviel kaputtzumachen.FPK hat geschrieben:Wenn sich andere um Sachen wie optimiertes Shiften implementieren und testen kümmern...
Ich hätte da diverse optimiere Mul und Div-Funktionen zu bieten. Eine Sqrt für 32-bit. Inc kann man übrigens auch noch optimieren.

-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: AVR Inline-Optimierung
Ich habe mal kurz gegoogelt, aber nichts gescheites gefunden.
Gibt es die PIC32 und Cortex M3 auch in einem handlichen DIP-Gehäuse, so wie es der Atmega328 ist ?
Und ist die Programmierung und das Flashen auch so einfach ?
Gibt es die PIC32 und Cortex M3 auch in einem handlichen DIP-Gehäuse, so wie es der Atmega328 ist ?
Und ist die Programmierung und das Flashen auch so einfach ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: AVR Inline-Optimierung
Du bekommst den Cortex M0 als 28er-DIP von NXP: LPC1114Mathias hat geschrieben:Gibt es die PIC32 und Cortex M3 auch in einem handlichen DIP-Gehäuse, so wie es der Atmega328 ist ?
Und ist die Programmierung und das Flashen auch so einfach ?
In der Theorie kann man den per UART programmieren, wobei ich mir bei meinem einzigen Versuch einen Spannungswandler zerschossen habe. Das laste ich aber eher mir selbst an.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: AVR Inline-Optimierung
... und wird auch von FPC unterstützt.Socke hat geschrieben: Du bekommst den Cortex M0 als 28er-DIP von NXP: LPC1114
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: AVR Inline-Optimierung
Also mal Back to Topic.
Warum macht der Compiler sowas:
Warum wird die Konstante nicht gleich in r24 geladen? Nicht dass es mich an dieser Stelle stören würde, danach rödelt der Compiler 500 Takte in einer Schleife, weil er auf das blöde Display wartet. Ich würde es nur gern verstehen.
Warum macht der Compiler sowas:
Code: Alles auswählen
# [105] delay_us(50); // Write Delay
ldi r26,50
mov r24,r26
call INIT_ss_DELAY_USsBYTE
Re: AVR Inline-Optimierung
-O3 vergessen?Timm Thaler hat geschrieben:Also mal Back to Topic.
Warum macht der Compiler sowas:Warum wird die Konstante nicht gleich in r24 geladen? Nicht dass es mich an dieser Stelle stören würde, danach rödelt der Compiler 500 Takte in einer Schleife, weil er auf das blöde Display wartet. Ich würde es nur gern verstehen.Code: Alles auswählen
# [105] delay_us(50); // Write Delay ldi r26,50 mov r24,r26 call INIT_ss_DELAY_USsBYTE
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: AVR Inline-Optimierung
Nö. Ich kompiliere für AVR immer mit O3. Mit O2 macht er auch einfache for-Schleifen mit 16bit, und O4 wird ja nicht empfohlen.FPK hat geschrieben:-O3 vergessen?
Gerade mal O4 versucht. Uiii, das ist ja wirklich "aggressiv". Da ruft er die Delay-Routine mit einem jmp statt call auf, und springt dann direkt aus der Delay-Routine zurück.
Allerdings bleibt das ldi - mov dennoch stehen. Taucht so noch an verschiedenen Stellen im Programm auf, wenn eine (uint8) Konstante an eine Prozedur übergeben wird.
Zuletzt geändert von Timm Thaler am Sa 3. Mär 2018, 14:53, insgesamt 1-mal geändert.
Re: AVR Inline-Optimierung
Dann bitte komplettes BeispielTimm Thaler hat geschrieben:Nö. Ich kompiliere für AVR immer mit O3. Mit O2 macht er auch einfache for-Schleifen mit 16bit, und O4 wird ja nicht empfohlen.FPK hat geschrieben:-O3 vergessen?

Mit einem einfachen Test kriege ich nämlich:
Code: Alles auswählen
# [6] p(50);
ldi r24,50
call PsPROGRAM_ss_PsBYTE
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: AVR Inline-Optimierung
Wie viel mal hast du Delay aufgerufen ?Gerade mal O4 versucht. Uiii, das ist ja wirklich "aggressiv". Da ruft er die Delay-Routine mit einem jmp statt call auf, und springt dann direkt aus der Delay-Routine zurück.
Wen es mehrmals wie nur einmal ist, würde dies mit jmp nicht mehr funktionieren.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 6899
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: AVR Inline-Optimierung
Der Thread ist mir untergegangen.FPK hat geschrieben:... und wird auch von FPC unterstützt.Socke hat geschrieben: Du bekommst den Cortex M0 als 28er-DIP von NXP: LPC1114
Den LPC1114 muss ich mal genauer angucken, wie wird der von FPC unterstützt, über embedded arm ?
Was aber noch ein grösseres Problem ist, der Chip ist nicht mal bei Reichelt erhältlich.
Aber zuerst werde ich mich mehr mit den AVR beschäftigen.
Ist auf dem Arduino due ein ähnlicher Chip verbaut ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot