www.mikrocontroller.net

Forum: Compiler & IDEs Code verstehen?


Autor: Vinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo miteinand,

bin noch relativer Neuling auf dem gesamten Gebiet. Toolchain habe ich 
am laufen und auch schon eine LED (habe mir das RN-board + Mega32 
geholt) zum leuchten gebracht.
ABER: nun  will ich mal ein bisschen mehr als das ... z.b. USART, ADC, 
PWM etc.
Die diversen libs habe ich schon gefunden.
Nur verstehe ich die leider meistens nicht (wenn man sich mal dran setzt 
und die diversen h und c files kapieren möchte).
Wofür stehen diese ganzen _ oder ? Und die sind meistens in 
irgendwelchen kryptischen Bezeichnungen ... bsp.: iom32.h  --- #ifndef 
_Assembler .
Außerdem gibt es diese SFR (spezial funktion registers) mit einem Haufen 
wilder Zusatzbezeichnungen und wiederum lauter _ -> vgl. ebenfalls 
iom32.h. Was soll das?

Hoffe mir kann jemand unter die Arme greifen

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

Bewertung
0 lesenswert
nicht lesenswert
Um eine Library zu verstehen sind die *.h und *.c wirklich
kein guter Weg. Das macht man nur dann, wenn keine vernünftige
Doku zur Verfügung steht.

Aber hast du schon mal ins Tutorium auf dieser Site geschaut?

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Ein paar Blicke ins Assembler Tutorium können auch nicht
schaden:
http://www.mikrocontroller.net/articles/AVR-Tutorial

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn es um die AVR-libC geht: Da ist eine Doku dabei, die auch afaik mit 
WINAVR zusammen "installiert" wird...

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

Bewertung
0 lesenswert
nicht lesenswert
> Wofür stehen diese ganzen _ oder ?

Erst einmal sind das ganz normale gültige Zeichen in Bezeichnern der
Sprache C (also Namen von Makros, Funktionen, Funktionsparametern,
Variablen, ...).  Namen die mit einem oder zwei Unterstrichen beginnen
haben aber per Dekret (des C-Standards) eine Besonderheit: sie sind
reserviert "for the implementation", d.h. für den Compiler und die
Standardbibliothek.  Damit verhindert man, dass diese Namen mit
gültigen Namen in der Applikation kollidieren können (da Applikationen
selbst derartige Namen nicht von sich aus benutzen/erfinden dürfen).

Um's mal anschaulich zu machen, stell dir vor, ein Headerfile der
Systembibliothek (sagen wir, <foo.h>) hätte folgenden
Funktionsprototypen deklariert:
int dosomething(int x, int y);

Jetzt kommt eine Applikation und schreibt
#define x 800 /* X-Aufloesung */
#define y 600 /* Y-Aufloesung */

#include <foo.h>

...

Was passiert dann?  Nach dem Präprozessor sieht das dann für den
Compiler so aus:
int dosomething(int 800                   , int 600                   );

...was offensichtlich kein sinnvoller oder gültiger Funktionsprototyp
mehr ist.  Daher muss foo.h stattdessen schreiben:
int dosomething(int __x, int __y);

Da die Bezeichner __x und __y "reserved for the implementation" sind,
darf die Applikation sie selbst in keiner Weise bereits definiert
haben.  Damit lässt sich das Ganze ordentlich compilieren, egal was
die Applikation an legalen Makros bereits selbst definiert hat.

Aber wie andere schon schrieben: ich würde nicht mit dem Studium der
Headerfiles der Systembibliotheken beginnen.  Bibliotheken schreibt
man so, dass sie unter allen möglichen Randbedingungen gut
funktionieren, dass sie möglichst flexibel sind, ggf. verwenden sie
allerlei Compilertricks (inline asm, beim GCC irgendwelche
__attribute__-Dinge), um spezielle Ziele zu erreichen (und sei's nur
optimaler Code), das erschwert alles das Verständnis.  Das Ziel einer
Bibliothek ist ja eine gute Benutzbarkeit.

Nimm dir Beispielcode.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und nimm dir das Datenblatt des Prozessors. Da steht drin, was welches 
Bit in welchem Register bedeutet. Das, die avr-libc Doku und das 
avr-gcc-Tutorial hier oben rechts ist alles, was man braucht.

Oliver

Autor: wulf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> und das avr-gcc-Tutorial hier oben rechts...
...hier oben links ;-)

Autor: Vinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
coole Sache ...

bin dabei das alle mal abzuchecken! Vielen Dank für die schnellen und 
guten Antworten!

Schönes WE

Vinz

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.