#define - Strukturierung

Gast #2761207
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
Gast
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
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
Gast
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?
Gast
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.
Gast
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
Gast
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

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.