Datum: 09.04.2008 11:26
Hallo an alle, Programmiere Mikrpkontroller und und verstehe den Befehl MVAR nicht. Was bedeutet z.B. das #define MVAR(object, addr) (*((object volatile *) (addr))) oder das?? #define Interrupt_Enable_Register MVAR(unsigned char, 0x280001) thanks for help
Datum: 09.04.2008 11:36
> Was bedeutet z.B. das > #define MVAR(object, addr) (*((object volatile *) (addr))) Das definiert einen Befehl MVAR mit 2 Parameter > > #define Interrupt_Enable_Register MVAR(unsigned char, 0x280001) und hier wird der Befehl dann genutzt. was dieser Befehl allerdings macht weiss ich auch nicht ;-)
(*((object volatile *) (addr)))
|
Datum: 09.04.2008 12:02
Das sind keine "Befehle", das sind Macros. MVAR() castet "addr" auf einen Pointer und dereferenziert den Pointer (holt den Inhalt). Interrupt_Enable_Register() holt somit den Inhalt von Adresse 0x280001 als einen unsigned char. Das volatile dient dazu, dem Compiler zu erzählen, er soll die Zugriffe nicht optimieren. Damit wird sichergestellt, dass 0x280001 jedesmal frisch gelesen (oder geschrieben) wird, wenn das so im Code steht.
Datum: 09.04.2008 13:27
Danke für die schnellen antworten. habt mir weiter geholfen
Datum: 09.04.2008 14:25
und noch eine frage die vieleicht nicht so kompl. ist. wie füge ich in mein progr. am schnellsten einen header ein???? z.B. UART.h ???????
Datum: 09.04.2008 15:14
Wenn es ein Header vom Compiler ist üblicherweise #include <uart.h> Für eigene benutzt man #include "file.h" Der Unterschied sind die Suchräume, in denen nachgesehen wird.
Datum: 09.04.2008 15:49
hab ich so gemacht #include "file.h", findet das file drotzdem nicht.
Datum: 09.04.2008 15:59
Gena wrote: > hab ich so gemacht #include "file.h", > findet das file drotzdem nicht. Ich vermute mal, daß uart.h zum Compiler gehört und nicht zu deinem Progamm. Dann mußt du die Form <...> nehmen. Der Compiler sucht dann den Pfad ab, den er bei der Installation in seinen Einstellungen hinterlegt bekommen hat. Die Form "..." nimmt man für Dateien, die im selben Verzeichnis liegen, wie die .c-Datei. (Man kann aber auch dafür üblicherweise einen Pfad definieren.) Lies mal im Compilerhandbuch das Kapitel "include" nach...
Datum: 25.06.2008 14:08
Hi kann ich auch eigentlich das bereits oben beschriebene Macro beschreiben??? z.B. Interrupt_Enable_Register = 0x78; ???????????? oder kann ich das nur auslesen????? danke
Datum: 25.06.2008 16:56
Macros sind keine Variablen. Sie werden vom Präprozessor verarbeitet, der Compiler sieht nur ihr Resultat.
Datum: 26.06.2008 08:14
Aber der Inhalt z.B. von der adresse 0x280001 (#define Interrupt_Enable_Register MVAR(unsigned char, 0x280001)) muss doch irgendwie beschrieben werden, also ist das doch eine Art Variable??? deren Inhalt man füllen kann??? aber Wie????
Datum: 26.06.2008 09:21
Hallo Gena, funktioniert das denn bei Dir nicht?? Üblicherweise sollte ein C-Compiler daraus folgendes machen: *((unsigned char volatile *) 0x280001) = 0x78; und das ist in 'C' 'ne übliche Schreibweise. Prinzipiell ist es auf jeden Fall sinnvoll, innerhalb von Macros die verwendeten Platzhalter zu klammern, also: #define MVAR(object, addr) (*(((object) volatile *) (addr))) Gruß Thomas O.
Datum: 26.06.2008 11:41
Gena wrote: > Aber der Inhalt z.B. von der adresse 0x280001 > (#define Interrupt_Enable_Register MVAR(unsigned char, 0x280001)) > > muss doch irgendwie beschrieben werden, also ist das doch eine Art > Variable??? deren Inhalt man füllen kann??? aber Wie???? Das ist aber ein bischen was anderes, als den Macro zu beschreiben - Der ist nämlich nur eine Anweisung an den Präprozesser, das Symbol Interrupt_Enable_Register durch was anderes zu ersetzen und das Ergebnis dann dem Compiler zu fressen zu geben. Der Compiler weiß davon nichts.
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel