mikrocontroller.net

Forum: Compiler & IDEs was heisst eigentlich "inline"


Autor: karlheinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
inline void mmc_write_byte (U08 Byte)

was heisst das linine in winavr-c.


mfg karlheinz

Autor: bone (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ist eigentlich wie ein macro...

dh. wenn du mmc_write_byt(xy) aufrufst, springt das programm nicht zu
der Funktion, sondern der quellcode der fuktion wird an dieser stelle
eingefügt...

das programm wird meist dadurch länger (codegrösse) aber schneller
(meistens zumindest)...

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

das ist nicht zwingend. Der C-Standard schreibt dazu:

A function declared with an inline function specifier is an inline
function. The function specifier may appear more than once; the
behavior is the same as if it appeared only once. Making a function an
inline function suggests that calls to the function be as fast as
possible. The extent to which such suggestions are effective is
implementation-defined.

Matthias

Autor: bone (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@matthias:

:-) danke, das stimmt... im grossen und ganzen nur ein wunsch an den
compiler diesen teil zu beschleunigen :-)

winavr-c ist jedoch der gcc somit habe ich den schritt in die spec des
gcc gewagt, und da steht:
By declaring a function inline, you can direct GCC to integrate that
function's code into the code for its callers. This makes execution
faster by eliminating the function-call overhead;

Autor: Christian O. (derbrain)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir gerade (relativ komplexe) Beispiel-Software für einen
ATmega angeschaut (von Atmel selbst) und mich gewundert, dass die kein
einziges inline verwenden. Macht das der Compiler selbst?
Ich meine, Initialisierungsfunktionen etc. werden ja meist nur einmal
ausgeführt und werden ja nur der Übersichtlichkeit halber vom
Hauptprogramm getrennt, oder?
Grüße
Christian

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grade bei Initialisierungsfunktionen macht inline meist
relativ wenig Sinn. Durch inline moechte man ja den call-
overhead einsparen. Wird eine Funktion nur einmal aufgerufen,
dann ist dieser Overhead auch kein wirkliches Problem, da er
ja nur einmal auftritt.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unnötig ist er trotzdem.

Der GCC inlinet als "static" deklarierte Funktionen bei -Os
durchaus selbstständig.  Ist nicht jedermann's Sache, da das
im Debugger natürlich lustig aussieht, wenn man im Einzelschritt
durchgeht.  "step out" funktioniert dann meist auch nicht mehr
so, wie man sich das vorstellt...

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.