Hallo Leute, ich habe schon einige Beiträge gelesen und bin mir sicher, dass ihr mir helfen könnt. Programmierung in C: Wie unterscheiden sich unsigned char bit@0x00; unsigned char pbit@0x00; unsigned char sbit@0x00; (Bitte vernachlässigt die Adressierung) Werden externe Funktionen nicht über Bibliotheken eingebunden ? Was meint man wenn man von einem 8 oder 16 Bit Mikrocontroller spricht ? Den Adressbus ? Ich Danke euch vielmals
Felix Wloka schrieb: > Was meint man wenn man von einem 8 oder 16 Bit Mikrocontroller spricht ? > Den Adressbus ? Die breite des Datenbuses
:
Bearbeitet durch User
Max H. schrieb: > Die breite des Datenbuses Den internen oder den externen? Oder ist es doch eher die Breite der ALU?
Felix Wlo schrieb: > unsigned char bit@0x00; > unsigned char pbit@0x00; > unsigned char sbit@0x00; Du definierst in jedem Fall eine Variable vom Typ unsigned char. Die drei Definitionen unterschieden sich nur im Namen der Variablen. Sollte es dir bei der Frage um adressierbare Bits gegangen sein, dann lies bitte http://www.keil.com/support/man/docs/c51/c51_le_bitaddrobj.htm Zu 8/16 Bit: Wenn die Breite der ALU ausschlaggebend wäre, wäre der Z80 eine 4 Bit Maschine. Wäre es die Breite des (externen) Datenbusses, wäre der 8088 eine 8 Bit Maschine. Es ist also etwas komplexer. Als Kompromiss vielleicht: Die Breite der Standard Register ist maßgebend.
Vielen Dank für eure Antworten. Kann mir jemand erklären was externe Funktionen sind und wie diese eingebunden werden ?
Felix Wlo schrieb: > externe Funktionen Such mal nach "compiler header files". Da findest du vieles zu diesem Thema. Ein gutes Buch über die Grundlagen der Programmierung hilft auch. Hier für das Forum ist das zu lang.
Funktionen können im Projekt an mehreren Stellen stehen. - in der selben Datei wie die main()-Funktion - in einer weiteren .C-Datei im selben Verzeichnis - in einer weiteren .C-Datei in einem anderen Verzeichnis - in einer vorcompilierten Bibliothek Einfachster Fall für Anfänger: - die Funktion steht in der selben Datei vor der main()-Funktion dann kennt der Compiler die Argumente und den Typ des Rückgabewertes, wenn die Funktion dann z.B. in main() aufgerufen wird - die Funktion steht in der selben Datei nach der main()-Funktion dann meckert der Compiler und man braucht oben einen Funktionsprototyp. Wenn es zu viele Prototylen werden, kann man die auch in eine .h-Datei auslagern. - die Funktion steht in einer weiteren .C-Datei Funktionsprototyp notwendig und damit der Compiler nicht verzweifelt in der Hauptdatei sucht, steht 'extern' davor. Meist hat man bei eigenen Funktionssammlungen eine .C und eine .h-Datei. Wenn die Dateien in einem anderen Pfad stehen, dann kann man den bei der #include-Zeile mit angeben:
1 | #include <tolle_funktionen.h> // sucht die h-Datei im Such-Pfad |
2 | #include "./lib/wichtige_funktionen.h" // in Unterverzeichnis lib ist die Datei |
Bernhard Spitzer schrieb: > - die Funktion steht in einer weiteren .C-Datei > Funktionsprototyp notwendig und damit der Compiler nicht verzweifelt > in der Hauptdatei sucht, steht 'extern' davor. Das "extern" hat nichts damit zu tun, in welcher Datei etwas definiert ist, sondern es dient dazu, eine Definition und eine Deklaration zu unterscheiden. Eine Deklaration sagt dem Compiler "Es gibt irgendwo ein Objekt eines bestimmten Typs mit einem bestimmten Namen". Eine Definition sagt dagegen "Lege ein Objekt eines bestimmten Typs mit diesem Namen im Speicher an". Beispiel:
1 | extern int i; // Deklaration: Es gibt irgendwo eine Variable i vom Typ int |
2 | int k; // Definition: Lege eine Variable k vom Typ int im Speicher an |
Eine Definition ist automatisch auch eine Deklaration, umgekehrt gilt das nicht. Damit man im Code eine Variable verwenden kann, muss der Compiler vorher eine passende Deklaration sehen. In welcher Datei und an welcher Stelle die Variable definiert wird, spielt keine Rolle. Das gleiche gilt für Funktionen: Bevor man sie verwendet, muss* der Compiler eine Deklaration sehen. Definiert werden darf sie in einer beliebigen Datei. Im Gegensatz zu Variablen kann der Compiler eine Funktionsdeklaration und -definition auch ohne "extern" unterscheiden: Wenn ein Funktionsrumpf (geschweifte Klammern) dahinter steht, ist es eine Definition, ansonsten eine Deklaration. Man darf das "extern" trotzdem dazu schreiben, es ändert aber nicht die Bedeutung. Beispiel:
1 | // Deklaration: Es gibt irgendwo eine Funktion mit Namen f,
|
2 | // die keinen Parameter nimmt und einen Wert vom Typ int zurückgibt
|
3 | int f(void); |
4 | |
5 | // Deklaration: Identische Bedeutung
|
6 | extern int f(void); |
7 | |
8 | // Definition: Lege diese Funktion mit Namen g im Programmspeicher an
|
9 | int g(void) |
10 | {
|
11 | return 5; |
12 | }
|
* Genau genommen kann man aus historischen Gründen in C eine Funktion auch ohne vorherige Deklaration aufrufen, allerdings oft mit unerwünschten Effekten. Der Compiler wird davor normalerweise zu Recht warnen.
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.