www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik lib_AT91SAM7 von IAR __inline


Autor: Karl Zeilhofer (griffin27)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ihre kennt sicherlich die "library" von IAR.
darin werden inline-funktionen definiert, um einem das programmieren 
etwas zu erleichtern.

mein problem ist nun, dass in jedem programm.c, in dem diese library 
(bei mir konkret lib_AT91SAM7A3.h) includiert wird, die ganzen inline 
funktionen in den maschinen code kommen, obwohl ich nur einige wenige 
davon benötige.

ich dachte mir immer, inline funktionen werden vor dem kompilieren 
einfach an die stelle eingesetzt. der vorteil von inline ist ja, dass es 
keinen unterprogrammaufruf gibt. daher sehr schnell. andererseits, wird 
der code an jede stelle jedes aufrufes kopiert. daher, wenn man die 
funktion oft braucht, entsteht viel maschinen code.

ich arbeite mit Rowly CrossWorks for ARM V1.5., verwende aber die 
includes von IAR.
muss ich da dem linker irgendwas beibringen, dass er die 
inlinefunktionen weglässt?

bei EINER C-datei ist es ja nicht DIE tragik, ist halt der code etwas 
größer... aber wenn ich zB 3 C-datein habe, kommt es zu 
definitions-konflikten, da jedes objectfile die inline-funktionen 
definiert hat...

ich hoffe mir kann da jemand weiterhelfen.

lg, karl

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

Bewertung
0 lesenswert
nicht lesenswert
Mach sie static inline statt einfach nur inline.

Autor: Karl Zeilhofer (griffin27)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich bin entzückt!!! es funktioniert!!

jörg, kannst du mir noch kurz erklären, wo nun der unterschied ist 
zwischen STATIC INLINE und INLINE??

vielen dank,
karl

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

Bewertung
0 lesenswert
nicht lesenswert
Nun, bei "inline" wird, wie du schon festgestellt hast, noch eine
explizite Kopie der Funktion angelegt.  Das hängt damit zusammen, dass
die Funktion external linkage hat und dass inline in C eine Art
Empfehlung ist, die der Compiler berücksichtigen darf aber nicht muss.
Es ist daher völlig legales C, dass man von so einer Funktion die
Adresse nimmt und irgendwohin zuweist.  Da der Compiler infolge der
external linkage nicht wissen kann, ob nicht irgendein anderer Modul
letztlich die Adresse der Funktion doch noch benötigt, ist er
gezwungen, die zusätzliche Kopie anzulegen.

Bei static inline ändert sich das Bild, da die Funktion nunmehr für
jeden Modul ("translation unit") nur noch file scope besitzt, der
Compiler folglich verfolgen kann, ob die extra Kopie der Funktion
überhaupt benötigt wird.  Damit kann diese Kopie in der Regel
weggelassen werden.  Aber selbst wenn diese Kopie benötigt wird,
garantiert der durch "static" erzeugte file scope, dass die Funktionen
gleichen Namens aus zwei verschiedenen Modulen am Ende nicht
miteinander kollidieren, sondern eben einfach zweimal da sind.

Autor: Karl Zeilhofer (griffin27)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich glaub, dass ich es so halbwegs verstanden habe.

vielen dank nochmals.

<thread closed>

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.