mikrocontroller.net

Forum: Compiler & IDEs Inline Funktionsdeklaration warum und wann


Autor: Volker Endres (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,
kann mir jemand bitte erklärren, für was die inline Deklartion bei
Funktionen wichtig ist und wann ich diese einzusetzen habe.

Vielen Dank Volker

Autor: Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Inlinefunktionen werden immer direkt, ohne Sprünge vom Comiler in den
Assembler/Maschinen Code geschrieben. Sie sollen dann eingestzt werden,
wenn es um zeitkritische Operationen geht.

Autor: Volker Endres (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hubert,
danke für die schnelle Antwort, aber wann weiß ich ob meine Funktion
zeitkritisch ist oder nicht.
wenn ich jetzt erstmal die funktion ganz normal schreibe ohne inline
und nur feststelle es geht nichts wie soll ich dann auf die Idee kommen
halt ich muß ja inline verwenden.

Danke für eine Antwort und Gruß Volker

Autor: Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du darfts nicht vergessen, das eine Inline-Funktion direkt geschrieben
wird, d.h. sie wird nicht kopiert, braucht also mehr Platz im
Programmspeicher.
Was zeitkritisch ist, mußt du von Fall zu Fall unterscheiden. Eine
Funktion die schnell etwas darstellen soll (Windows-like, z.B.
Draw-Funktionen) würde ich inline machen.
Wenn Du ein Programm neu schreibst brauchst Du zunächst keine Inlines.
Aber zwecks Optimierung sollte man sich schon Gedanken machen.
Mit viel Erfahrung wählst du dann inline oder nicht inline.
Und programmierung ist halt viel Erfahrung.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe gerade das Problem, dass das Prog ohne inline nicht richtig
abläuft, also er (der Controller) aus manchen Funktionen nichtmehr
"rauskommt". Wenn ich jede Fkt. inline deklariere, funktioniert es
zwar, aber dann ist der Speicher viel zu schnell voll. Was kann ich da
machen?

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne Codebeispiel schwer zu sagen...

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klingt meist nach kaputtem Stack.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Crossposts sind immer noch nicht gern gesehen:
http://www.roboternetz.de/phpBB2/viewtopic.php?t=9817

Dort wurde das Problem bereits gelöst. Unterlass bitte das
Crossposting, poste aber wenigstens, wenn du das Problem lösen
konntest.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast vollkommen recht, was auch immer "crossposts" sind. Das Post
auf Roboternetz.de war auch von mir. Habe halt das gute alte
Breitschwert ausgepackt ohne hinterher zu wissen, wo ich zugeschlagen
habe. Woher kann ich denn auch wissen, dass alles so stark miteinander
verwoben ist, dass es hier Leute gibt, die verschiedene Foren (und die
Posts darin) miteinander vergleichen und aufeinander abstimmen.

Aber ja, das Problem ist gelöst: ich hab falsch compiliert. Nämlich
statt für den verbauten ATmega8 für den ATmega32.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

nur um das ursprüngliche Thema nochmal aufzugreifen:
Inline sollte man nicht grundsätzlich bei zeitkritischen Funktionen
eingesetzt werden. Inline-Funktionen sind eher da geeignet wo das
Verhältnis aus Funktionsaufruf und eigentlichem Funktionsrumpf schlecht
ist. Typisches Beispiel sind getter/setter-Methoden einer Klasse. Dort
benötigt der Funktionsaufruf soviel mehr Laufzeit als die eigentliche
Funktion das sich der Aufruf einfach nicht lohnt.

Eine Draw-Methode würde ich grade nicht inline machen da sie reichlich
komplex seion dürfte was den Code aufbläht und an der Laufzeit fast
nichts ändert da der eigentliche Rumpf ein Vielfaches der Laufzeit des
Aufrufes benötigt.

Matthias

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Du hast vollkommen recht, was auch immer "crossposts" sind.

Als Crossposts werden identische (oder sehr ähnliche und zeitnahe)
Posts in verschiedene Foren bezeichnet. Crossposts sind eigentlich in
keinem Forum gern gesehen.
http://www.lugbz.org/documents/smart-questions_de.html#forum

Autor: Andreas Siebel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um Code zu sparen deklariere ich "init" Funktionen auch inline, da sie
eh nur einmal aufgerufen werden.

Autor: Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie kommst Du auf die Idee, daß das Code sparen soll?

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen [R]CALL und ein RET. ;-)

Autor: Andreas Siebel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GENAU ;)

Nicht viel aber immerhin. Wenn du noch Variablen bei der Initfunktion
übergibts können es auch ein paar bytes mehr werden.

Autor: Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, wieder etwas dazu gelernt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.