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.
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.
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.
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.
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>
Eugen.S schrieb: > Das steht in der .h Datei: und welche Fehlermeldung bekommt du? Wie ist die Name der header-Datei?
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.
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
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.
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.
Wenn einer ein Bespiel hat wie man es richtig macht, wäre ich auch sehr dankbar dafür.
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
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.
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!
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.
Als Stichwort werfe ich mal noch "HAL" in den Raum. (Hardware abstraction layer)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.