Forum: Compiler & IDEs #define - Strukturierung


von hal (Gast)


Lesenswert?

Hallo,
leider bin ich nicht wirklich C standfest, aber lerne immer mehr dazu.
Ich habe mir die Vorlage aus dem Artikel 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung 
entsprechend für mein LCD angepasst und diese mit
1
#include "LCD.h"
in mein Hauptprogramm eingebunden. In der 'LCD.h' sind die Ports für das 
LCD definiert.
1
//  LCD DB4-DB7 <-->  PORTD Bit PD0-PD3
2
#define LCD_PORT      PORTD
3
#define LCD_DDR       DDRD
4
#define LCD_DB        PD0
5
 
6
//  LCD RS      <-->  PORTD Bit PD4     (RS: 1=Data, 0=Command)
7
#define LCD_RS        PD4
8
 
9
//  LCD EN      <-->  PORTD Bit PD5     (EN: 1-Impuls für Daten)
10
#define LCD_EN        PD5
Allerdings hätte ich lieber die Definitionen im Hauptprogramm. Das würde 
es für mich leichter machen verschiedene Projekte bzw. Hardwareversionen 
zu verwalten.

Geht das?

danke
hal

von Oliver (Gast)


Lesenswert?

Nein. Es ist natürlich absolut verboten, auch nur ein #define in ein 
Hauptprogramm zu schreiben ;)

Natürlich kannst und darfst du die defines auch direkt in dein 
Hauptprogtramm schreiben.

In ein separates header-file schreibt man die eigentlich nur, wenn die 
defines auch in anderen .c-Files benötigt werden, oder aber, um das 
ganze etwas aufgeräumter zu haben.

Wenn deine defines nur in einem einzigen .c-File benötigt werden, kannst 
du die selbtsverständlich direkt dort hinein schreiben.

Oliver

von Karl-heinz W. (heinzel)


Lesenswert?

Hallo hal,

natürlich kannst du auch alles in eine Datei (main.c) schreiben. Aber 
wenn du das Wort 'Projekte' oder 'Hardwareversionen' verwendest solltest 
du allgemeine Definitionen, die für mehrere Module wichtig sein könnten 
in '.h' Dateien halten.

Das Thema für dich ist wohl erst mal "wie strukturiere ich ein 
C-Softwareprojekt".

Gruß

Heinzel

von hal (Gast)


Lesenswert?

Wie gesagt: ' nicht wirklich C standfest' ;-)

Natürlich habe ich bereits probiert die #define in das Hauptprogramm vor 
der #include "LCD.h" Anweisung zu schreiben. In der LCD.h hab ich dann 
die #defines mit   #ifndef abgesichert.
1
  #ifndef LCD_DATA
2
    #define LCD_DATA    PG0
3
  #endif
Allerdings wurden die #defines in der LCD.h ausgeführt?

von Micha (Gast)


Lesenswert?

Ich denke, dass das so nicht funktioniert, da die defines in der lcd.c 
ebenfalls verwendet werden. Dort müsstest du dann die main.c inkludieren 
was du tunlichst vermeiden solltest. Wie wäre es wenn du für solche 
Dinge eine hw_cfg.h anlegst und dann in main.c und lcd.c oder lcd.h 
inkludierst? Dann hast du die Konfigurationsmöglichkeit in einer Datei 
zusammengefasst und musst die anderen nicht mehr ändern.

von Oliver (Gast)


Lesenswert?

hal schrieb:
> In der LCD.h hab ich dann
> die #defines mit   #ifndef abgesichert.

Du musst dich schon entscheiden: Entweder kommen die defines in dein 
.c-File, dann aber nicht nochmal in irgend ein header file, auch nicht 
mit ifdef-Konstruktionen. Oder die bleiben im header file, beides 
zusammen macht nur Probleme.

Olivver

von hal (Gast)


Lesenswert?

Oliver schrieb:
> Du musst dich schon entscheiden: Entweder kommen die defines in dein
> .c-File, dann aber nicht nochmal in irgend ein header file, auch nicht
> mit ifdef-Konstruktionen. Oder die bleiben im header file, beides
> zusammen macht nur Probleme.

Danke für ALLE Antworten ... ich denke ich beginne zu verstehen.
Meistens fehlen einfach die korrekten Schlagworte um mit einer Suche zu 
beginnen.

gruß
hal

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
Noch kein Account? Hier anmelden.