Guten Abend Ich lerne seid einiger Zeit das Programmieren von Microcontrollern in meiner Schule und bin nun soweit das ich Zuhause mein erstes kleines Projekt aufbaue. Mein Problem ist eigentlich recht "grundsätzlich" Wir Programmieren in der Schule einen 8051 von Atmel mit der Software RIDE7 Zuhause habe ich einen ATTINY13 und ich habe mir die Software Atmel Studio 6.2 geladen. Wir Programmieren in C In der Schule werden uns für Problemstellungen die Bibliotheken vorgegeben... Nun möchte ich gerne einmal wissen mit welcher bibliothek, die man mit #include einbindet, man welche Befehle benutzen kann. Gibt es für C Listen die sowas beinhalten. Im Datenblat steht das ne Tabelle für Assambler...aber die hilft mir leider nicht. Bitte korregiert mich wenn ich falsch liege... Die Programmsprache C ist doch Standartisiert. z.B können wir bei RIDE durch einfügen einer bibliothek einzelne Ausgänge schalten "P3_7" oder wir defenieren den benutzten Port nie als Eingang oder Ausgang. Ich habe schon mal gesehen das andere das machen müssen. oder uns steht eine sogenante "delay" Funktion beim 8051 nicht zur verfügung aber die ATTINY sollen sowas können. Das muss ja auch irgendwo stehen welche bibliothek man einfügen muss um einen "delay" befehl zu benutzen. Dort sollte dann auch die korekte Syntax stehen ^^ Ich hoffe ihr könnt in etwa nachvollziehen wo mein Problem liegt. Mein Programm was ich eigentlich schreiben möchte soll eine LED nur blinken lassen. Das ist ja im Grunde nicht schwer. Die oben genannten Punkte sind mit aufgefallen als ich im Netz dann diesen CODE für das Atmel Studio fand. #define F_CPU 20000000UL #include <util/delay.h> #include <avr/io.h> int main(void) { DDRD=0b01100000; while(1) { PORTD=0b01111111; _delay_ms(10); PORTD=0b00000000; _delay_ms(10); } } Danke im Vorraus :)
Bezüglich AVR Jedes Hardwareregister (nachzuschlagen im Datenblatt) wird über die AVR-Lib als gleichnamiger Variable (ein Pointer) zur Verfügung gestellt, um darüber lesend und schreibend zuzugreifen. Es gibt die C-STD-Lib, die es quasi für alle Plattformen gibt. Must du mal googlen. Natürlich fehlen beim AVR z.B. die Funktionen für Datei- und Konsolen ein und Ausgabe, da der AVR sowas nicht hat.
Jetzt nimmst du dir erstmal ein C-Buch und liest genau nach was es mit dem include auf sich hat. Dann schaust du dir die Unterschiede zwischen den AVR und dem 8051 an (besonders die Unterschiede im Bereich I/O). Dann wird dir schon klar warum du beim 8051 nirgends "einstellen" musst, ob der entsprechende Pin als Eingang oder Ausgang arbeiten soll.
Matze schrieb: > Wir Programmieren in der Schule einen 8051 von Atmel Warum der Umstieg auf AVR es gibt eine große Auswahl von 8051 nicht nur von Atmel. Zudem werden die 8051 mit Bootloader ausgeliefert so dass kein teurer Programmer erforderlich ist, nur USB-seriell-Kabel. Matze schrieb: > uns steht eine sogenante "delay" Funktion beim 8051 nicht zur > verfügung aber die ATTINY sollen sowas können Beim 8051 nimmt man üblicherweise einen globalen Timer als Zeitbasis z.B. 100 us dann ist z.B. 1 ms 10 ticks. Man kann aber auch grob ein delay machen und die Laufzeit messen bis es passt: void delay(volatile unsigned short cnt) { while (--cnt); }
Christian K. schrieb: > Jedes Hardwareregister (nachzuschlagen im Datenblatt) wird über die > AVR-Lib als gleichnamiger Variable (ein Pointer) zur Verfügung gestellt Das ist nicht ganz korrekt. Hier ist keine "AVR-Lib" im Spiel, das sind alles nur Deklarationen in einer Headerdatei. Die #include-Anweisung bindet keine Libraries ein, sondern Headerdateien. Und Headerdateien sind keine Libraries. Eine Headerdatei enthält Macros (#define-Anweisungen) und Deklarationen, d.h. Funktionsprototypen, was so viel heißt, "Die Funktion heißt X, hat Argumente Y und den Rückgabewert Z". Eine Library ist hingegen eine Sammlung bereits compilerter Funktionen, die vom Linker je nach Bedarf zum Programm hinzugefügt wird. Ein Beispiel dafür ist die libm, die mathematische Funktionen wie sin/cos enthält. Libraries und Headerdateien kommen oft als Paar - in der Headerdatei ist lesbar beschrieben, was in der Library enthalten ist. Um aber eine Library zu verwenden, genügt es nicht, nur die Headerdatei mit einer #include-Anweisung einzubinden, sondern sie muss dem Linker als Kommandozeilenargument übergeben werden. Das macht entweder die Projektverwaltung der verwendeten IDE oder aber, beispielsweise bei gcc, die Angabe des Parameters -l in der Kommandozeile mit dem abgekürzten Namen der Library (-lm für libm.a). Das aber ist compiler- bzw. linkerspezifisch, andere Systeme nutzen andere Kommandozeilenparameter und andere Namenskonventionen für Libraries. Um auf den Ausgangspunkt zurückzukommen: Um auf Hardwareregister des AVR zugreifen zu können, genügen die #define-Anweisungen in der jeweiligen Headerdatei, hier ist keine Library beteiligt.
Matze schrieb: > oder wir defenieren den benutzten Port nie als Eingang oder Ausgang. Im standard 8051 gibt es das nicht, da sind Portpins auf high, d.h. mit pullup auch als Eingang nutzbar. Einige 8051 können aber auch auf push/pull Ausgang konfiguriert werden. Es gibt standard Libs, die muß jeder C-Compiler enthalten. Bei manchen freien Demoversionen ist neben der Codebeschränkung auch keine float-Lib enthalten. Daneben ist für jedes Derivat noch eine Register-Lib enthalten, die die Hardware-Bits und -Bytes bekannt macht. Bei den AVRs sind noch Libs enthalten, z.B. für Delay, Watchdog, EEPROM, die kein Standard sind.
Die Doku der AVR Library findest du hier: http://de.wikipedia.org/wiki/Byte-Reihenfolge Darüber hinaus stehen Dir alle Register des jeweiligen Chips zur Verfügung. Deren Namen stehen im Datenblatt. Die Namen der Registe werden durch die io.h bereit gestellt:
1 | #include <avr/io.h> |
Schau da mal rein, dann wirst du sehen, dass diese Datei wiederum auf andere *.h Dateien verweist, je nach eingestelltem Chip Typ. Du könntest für den Atmega8 auch schreiben:
1 | #include <avr/mega8.h> |
Aber dann müsstest du den Source-Code auf jeden Fall ändern, sobald du auf einen anderen Chip wechselst.
Matze schrieb: > Nun möchte ich gerne einmal wissen mit welcher bibliothek, die man mit > #include einbindet, man welche Befehle benutzen kann. > Gibt es für C Listen die sowas beinhalten. Im Datenblat steht das ne > Tabelle für Assambler...aber die hilft mir leider nicht. Zu jeder Biblothek gehört eine Dokumentation, welche Funktionen in ihr enthalten sind und auf welche Weise man sie verwendet. In Ausnahmefällen gibt es so eine Dokumentation nicht als selbstständige Datei (Word, PDF o.ä.) sondern die Beschreibung ist in der C-Datei enthalten, aus der die Bibliothek erzeugt wird. Übrigens nennt man die "Befehle" in Bibliotheken nicht Befehle sondern "Funktionen". Es gibt z.B. Assembler-Befehle. > Bitte korregiert mich wenn ich falsch liege... > Die Programmsprache C ist doch Standartisiert. Das Wort heißt übrigens "standardisiert", mit 'd' statt mit 't'. Der Standard der Sprache C, beschreibt die Syntax und die Semantik der Sprache selbst und einige Bibliotheken. Aber nicht alle Bibliotheken. > z.B können wir bei RIDE durch einfügen einer bibliothek einzelne > Ausgänge schalten "P3_7" Dann ist das so eine besondere Bibliothek, die evtl. (ich weiss es nicht konkret) mit RIDE zusammen geliefert und installiert wird - jedenfalls gehört sie nicht zum Standard. > oder wir defenieren den benutzten Port nie als Eingang oder Ausgang. Ich > habe schon mal gesehen das andere das machen müssen. Wie schon von anderen Antwortetn erwähnt, hängt das vom Prozessor ab. Beim AVR stehen die Ports vom Reset an auf dem Zustand Eingang. > oder uns steht eine sogenante "delay" Funktion beim 8051 nicht zur > verfügung aber die ATTINY sollen sowas können. Das muss ja auch irgendwo > stehen welche bibliothek man einfügen muss um einen "delay" befehl zu > benutzen. Dort sollte dann auch die korekte Syntax stehen ^^ Die Syntax ist Teil des C-Standards und kann nicht geändert werden. Die Syntax beschreibt, in welcher Weise die Zeichen so kombiniert werden können, dass das Ergebnis ein Ausdruck der Sprache C ist. Mehr nicht. Was aber beschrieben ist, sind der Typ und Bedeutung des Rückgabewertes und Anzahl, Typ und Bedeutung der Parameter. Eine /_delay_ms/-Funktion ist in der avrlibc enthalten - die übrigens nicht Teil des C-Standards ist sondern mit dem gcc für AVR mitgeliefert wird (so wie die oben schon erwähnte mit RIDE). Leider ist es so, dass Du Dir diese Information für jede Bibliothek einzeln heraussuchen musst. Es gibt kein zentrales Dokument dafür. Allerdings ist diese Beschreibung z.B. für die avrlibc enthalten wenn Du Dir das AVRStudio bzw. den gcc installierst. Beachte aber bitte, dass es Bibliotheken gibt, die nicht Teil eines Compiler-Paketes sind. Ich hoffe, dass hilft Dir erstmal ein wenig weiter. Viele Aspekte haben ja auch schon die anderen Antworter abgedeckt.
Rufus Τ. Firefly schrieb: > Das ist nicht ganz korrekt. Hier ist keine "AVR-Lib" im Spiel, das sind > alles nur Deklarationen in einer Headerdatei. Auch wenn die "Lib" nur aus Headerdateien besteht (und keinen Quellcode oder Vorkompilierten Code enthält) ist es für mich eine Library, da sie die Hardware spezifischen Eigenschaften über Defines und Makros für den Programmierer besser zugänglich macht.
Christian K. schrieb: > Auch wenn die "Lib" nur aus Headerdateien besteht (und keinen Quellcode > oder Vorkompilierten Code enthält) ist es für mich eine Library, da sie > die Hardware spezifischen Eigenschaften über Defines und Makros für den > Programmierer besser zugänglich macht. Auch wenn Nudeln eigentlich nur aus Teig bestehen, ist es für mich Apfelkuchen, weil Nudeln auch zum Essen sind. Sag mal, merkst Du was? Wenn Du alles im Leben einfach umbenennst, weil es Dir dann besser passt, wirst Du kaum noch mit jemandem kommunizieren können. Heute klasse Schokolade! Keine Waffeln am Himmel!
Frank hat das jetzt etwas provokant ausgedrückt, aber wo er Recht hat, hat er Recht. Was eine Library ist, ist ganz klar definiert. Deine Interpretation > ist es für mich eine Library, da sie die Hardware spezifischen > Eigenschaften über Defines und Makros für den Programmierer besser > zugänglich macht. ist falsch.
Rufus Τ. Firefly schrieb: > Was eine Library ist, ist ganz klar definiert. Deine Interpretation ist es das? Was ist mit der STL die teilweise nur aus Headern besteht.
Hey Leute Danke erstmal für die Zeit die sich jeder hier genommen hat. Ich stimme dem zu das ich noch viel zu lernen und zu lesen habe ;D So wie sich das anhört unterscheidet sich der C Code wohl etwas von einander, wenn man unterschiedliche Entwicklungsumgebungen nimmt. Kann man das so sagen? Da steckt dann wohl der jeweilige Hersteller hinter oder? Wie man an den richtigen Code kommt um z.B beim Atmel Studio einen Ausgang setzt oder anderen Code in die richtige Syntax bekommt habe ich noch nicht so richtig verstanden. Habe schon mal im Netz nach einen Datenblatt von Atmel Studio 6 gesucht und schon in ein paar pdf s geblättert. Eine Frage die mich nun beschäftigt wäre nochmal die Definition bezüglich der LIBs. Was dort nun genau hinter steckt. Sind das nicht schlicht Wörterbücher die dem Compiler unseren getippten Code verständlich machen. Deswegen muss man doch die LIBs einfügen um bestimmte CODEs zu verwenden. Bitte um detalierte Verbesserung;D Achja wenn es den Rahmen nicht sprengt was ist den bei der Mikrocontroller programmierung der unterschied von C und C++ ? Ich danke euch allen schonmal für jede Antwort :)
Peter II schrieb: > ist es das? Was ist mit der STL die teilweise nur aus Headern besteht. Das ist C++, andere Baustelle. Denn dort ist es üblich, Code auch in Headerdateien unterzubringen. Der Begriff "Library" wird dort weiter gefasst, im engen technischen Sinne ist auch bei der Verwendung von C++ nur das eine Library, was dem Linker vorgeworfen wird und (bei Verwendung von gcc & Co.) auf .a endet.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.