Forum: Compiler & IDEs Header Datei für Konfiguration erstellen


von Eugen.S (Gast)


Lesenswert?

Guten Abend,

ich habe eine Frage und im Netz keine Antwort so richtig gefunden.
Ich möchte gerne die Konfiguration meines Controllers in eine .h Datei 
auslagern, damit ich mein C-File gut und schnell portieren kann, wenn es 
nötig werden sollte. Aber ich habe im Netz nicht gefunden, was mir 
weitergeholfen hat. Wahrscheinlich suche ich mit den falschen 
Schlagwörtern.

Hat jemand einen Tipp wo ich schauen kann?

Danke im Voraus.

von Peter II (Gast)


Lesenswert?

Eugen.S schrieb:
> Hat jemand einen Tipp wo ich schauen kann?

was suchst du denn genau? Schreibt doch einfach deine Konfig rein und 
inkludiere die Datei.

von Eugen.S (Gast)


Lesenswert?

Ich suche nach einer Erklärung wie man so eine .h Datei richtig 
ertstellt, in der die Konfig enthalten ist.

Peter II schrieb:
> Schreibt doch einfach deine Konfig rein und
> inkludiere die Datei.

Das habe ich gemacht, bekomme aber ein Fehler beim compelieren. Mein 
include ist an erster Stelle.

von Peter II (Gast)


Lesenswert?

Eugen.S schrieb:
> Peter II schrieb:
>> Schreibt doch einfach deine Konfig rein und
>> inkludiere die Datei.
>
> Das habe ich gemacht, bekomme aber ein Fehler beim compelieren. Mein
> include ist an erster Stelle.

dann zeig doch mal was du gemacht hast, und welche Fehlermeldung kommt.

von Eugen.S (Gast)


Lesenswert?

Das steht in der .h Datei:

#define F_CPU 8000000UL

PORTB = (1<<PB7);
DDRB = (1<<DDB7);

Und das in der .c Datei:

#include <AT90USB162.h>
#include <avr/io.h>
#include <util/delay.h>

von Peter II (Gast)


Lesenswert?

Eugen.S schrieb:
> Das steht in der .h Datei:

und welche Fehlermeldung bekommt du? Wie ist die Name der header-Datei?

von Peter II (Gast)


Lesenswert?

Was du unter Konfiguration versteht ist etwas merkwüdig.

> #define F_CPU 8000000UL
sollte man direkt im Projekt/Makefile einstellen.

> PORTB = (1<<PB7);
das ist kein Konfiguration.

da kann man z.b.
1
#define LED_PORT PORTB
2
#define LED_PIN PB7

und in der C Datei schreibt man dann.

LED_POR = (1<<LED_PIN):

dann würde das sinn machen.

von Eugen.S (Gast)


Lesenswert?

Die Fehlermeldung ist, dass derartige Datei nicht exestiert aber wenn 
ich den include schreibe dann bittet Atmel Studio mir die Datei an.

Das ist der Name: AT90USB162.h

von Eugen.S (Gast)


Lesenswert?

Peter II schrieb:
> Was du unter Konfiguration versteht ist etwas merkwüdig.

Und was ist da genau merkwürdig? Ich versuche mal zu erklären was das 
Ziel ist. Ich will den Code der C Dateil von dem Cotroller Typ zu 
entkoppeln. Ggf ist der Ansatz auch falsch aber das war jetzt eine Idee 
wie ich es machen könnte.
>
>> #define F_CPU 8000000UL
> sollte man direkt im Projekt/Makefile einstellen.
Ist diese Angabe nicht Controller abhängig? Sie trifft sicher auf viele 
Controllermodele zu aber kann sich ja auch mal ändern oder?
>
>> PORTB = (1<<PB7);
> das ist kein Konfiguration.
>
> da kann man z.b.
> #define LED_PORT PORTB
> #define LED_PIN PB7
Diese wollte ich in der C Datei ganz am Anfang machen und nicht in der H 
Datei.
>
> und in der C Datei schreibt man dann.
>
> LED_POR = (1<<LED_PIN):
>
> dann würde das sinn machen.

Das ist mir soweit klar.

von Peter II (Gast)


Lesenswert?

Eugen.S schrieb:
> Die Fehlermeldung ist, dass derartige Datei nicht exestiert aber wenn
> ich den include schreibe dann bittet Atmel Studio mir die Datei an.
>
> Das ist der Name: AT90USB162.h

dann hast du sie im falschen Verzeichnis oder die include paths sind 
nicht passend.

> Ist diese Angabe nicht Controller abhängig? Sie trifft sicher auf viele
> Controllermodele zu aber kann sich ja auch mal ändern oder?
ja, aber warum sollte man den Quellcode ändert nur weil man einen 
anderen Quarz hat.

Außerdem besteht die Gefahr, das man die include irgendwo vergisst und 
schon gibt es Probleme.

> #define LED_PORT PORTB
> #define LED_PIN PB7
Diese wollte ich in der C Datei ganz am Anfang machen und nicht in der H
Datei.
>
das ist doch aber die Konfiguration, also die Anpassung an die konkrete 
Hardware.

> PORTB = (1<<PB7);
das ist nur eine Initialisierung und keine Konfiguration.

Außerdem bekommt du schon ein Problem mit der Reihenfolge. PORTB ist 
noch nicht bekannt, weil du
1
#include <avr/io.h>
danach eingebunden hast.

von Eugen.S (Gast)


Lesenswert?

Wenn einer ein Bespiel hat wie man es richtig macht, wäre ich auch sehr 
dankbar dafür.

von Möwe (Gast)


Lesenswert?

Eugen.S schrieb:
>>
>> da kann man z.b.
>> #define LED_PORT PORTB
>> #define LED_PIN PB7
> Diese wollte ich in der C Datei ganz am Anfang machen und nicht in der H
> Datei.

...das heißt wenn du zu einer anderen Hardware wechselst und deine LED 
an einem anderen Port liegt dass du wieder in deiner .c rumwerkeln 
musst. Eben genau was du nicht wolltest. Für genau so etwas ist aber der 
Header da. Für Definitionen.

In einem guten C-Buch(!) sollten auch header und preprocessor vorkommen. 
Das kann ich weiterempfehlen ;)

Zu deinem Problem wäre es übrigens überaus hilfreich den kompletten 
Quelltext und die Fehlermeldung im Wortlaut zu haben, alles andere ist 
Rätselraten.

Gruß Möwe

von Peter II (Gast)


Lesenswert?

Eugen.S schrieb:
> Wenn einer ein Bespiel hat wie man es richtig macht, wäre ich auch sehr
> dankbar dafür.

Weil du es anders machen willst, es sinnvoll ist.

Habe dir doch schon ein Beispiel gegeben wie es sinnvoll ist. Fang doch 
einfach mal so an.

von Eugen.S (Gast)


Lesenswert?

Möwe schrieb:
> In einem guten C-Buch(!) sollten auch header und preprocessor vorkommen.
> Das kann ich weiterempfehlen ;)

Dann schaue ich einfach mal danach ;-)

Peter II schrieb:
> Fang doch einfach mal so an.

Werde ich einfach mal machen und schauen was da heraukommt.

Danke vorerst!

von grundschüler (Gast)


Angehängte Dateien:

Lesenswert?

Eugen.S schrieb:
> Ich will den Code der C Dateil von dem Cotroller Typ zu
> entkoppeln.

Ich bin da relativ weit gekommen. Ich habe jeweils eine Headerdatei 
main.c. Da werden alle uc-abhängigen Konfigurationen aufgerufen. mit 
_zucMain.h geht es dann uc-übergreifend weiter.

von Frank (Gast)


Lesenswert?

Als Stichwort werfe ich mal noch "HAL" in den Raum.
(Hardware abstraction layer)

von grundschüler (Gast)


Angehängte Dateien:

Lesenswert?

>grundschüler schrieb:

da fehlt das wichtigste...

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.