C18, #defines und Headerfiles, Deklarationen

Gast #2719874
Moin Leute,

ich hab etwas Ärger mit dem C18 Compiler.

Wenn ich in meiner Main.c soetwas definiere:
1
#include <p184550.h>
2
#include <glcd.h>
3

4
#define    TrisA_init   0b00000000
5
#define    LCD_A0       PORTAbits.RA1
6

7
void main() {
8
          TRISA = TrisA_init;
9
............ }

und es kommt in der Headerdatei glcd.h auch LCD_A0 vor.
Muß ich dann in der Headerdatei LCD_A0 deklarieren mit extern?
PORTAbits.RA1 ist doch schon über die p18f4550 Headerdatei bekannt, also 
muß ich das SFR mit den Addressen nicht bekannt machen.
Ich bekomme in glcd.h immer Error [1105] und [1101], symbol not be 
defined und lvalue required.
Hilfe wäre klasse!

Gruß
Andi
Gast #2719970
Verschiebe beide Defines in die Datei glcd.h.

Lass die Include Reihenfolge wie sie da ist.
Dann sollte das funktionieren.

Du musst nur aufpassen wenn du glcd.h nochmal an anderer Stelle 
includierst.
Dann muss  #include <p184550.h> wieder davor.
Gast #2720066
Erstmal danke für die Antworten!
Ich schreib mal was dazu:

Rufus Τ. Firefly schrieb:
> "lvalue required" bedeutet, daß das, was links von der Zuweisung steht,
> dem Compiler nicht passt. Das dürfte hier TRISA sein. Ist das irgendwo
> definiert?

Ist TRISA nicht, wie PORTA und LATA, in der p18f4550.h enthalten?
Aber das mit der linken Seite von #define stimmt, er meckert bei LCD_A0

Vincent Hamp schrieb:
> Wenn in glcd.h diese Definition drinnen is, dann brauchst du sie in
> Main.c sowieso nicht mehr, da du glcd.h ja einbindest.

LCD_A0 wird in der glcd.h aufgerufen, die Definition hab ich aber nur in 
der main.c. Ich dachte mir das es "unsauber" ist wenn ich diese #define 
's in die Headerdatei schiebe, weil man die glcd.h auch für andere PICs 
verwenden sollte...hab da auch noch den PORT D als #define mit in main.c 
(für die Datenpins D0-D7 u.a.) in kleineren PICs gibs aber eventuell 
kein D Register IO's.

Vincent Hamp schrieb:
> Ev. kennt glcd.h PORTA nicht, sofern du die P18F... Headerdatei dort
> nicht inkludiert hast.

Stimmt! In der glcd.h hab ich p184550.h nicht included, dachte es langt 
im main.c....

Ralph schrieb:
> Verschiebe beide Defines in die Datei glcd.h.

Ok, damit haben schon zwei Leute mir das verschieben in die glcd.h 
geraten, das nehm ich mir mal zu Herzen und schau was sich ergibt!

Was ist mit diesem "extern" Deklarationen gemeint?
Könnte ich z.b. in der glcd.h schreiben:

extern <datentyp> <Name>

wenn ich dann als Name LCD_A0 nehm frag ich mich nur was für ein 
Datentyp das ist, weil LCD_A0 als PORTAbits.RA1 in #define steht. Und 
bit kennt der C18 ja wieder nicht...?

Gruß
Andi

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.