Pin + Port an Library weitergeben

Gast #5058233
Lesenswert?

Hallo!

Ich programmiere das erste mal eine Library und habe eine Frage.
Für die Library müssen 4 Pins definiert werden, an der die Peripherie 
hängt.

Nun komme ich einfach nicht darauf, wie man das macht.
Wie kann ich 4x PIN + PORT für die Library definieren so das man sie 
einfach in der Library weiterverarbeiten kann?

Ich dachte erstmal an sowas wie:
#define PIN1 PB1

Aber das kann es auch nicht sein oder?
Weil ich muss ja dann auch noch DDRx und PORTx in der Library festlegen.

Für die meisten wird die Frage wahr. blöd vorkommen aber ich hoffe Ihr 
könnt mir helfen.

MfG
Gast #5058236
Lesenswert?

library schrieb:
> Für die meisten wird die Frage wahr. blöd vorkommen aber ich hoffe Ihr
> könnt mir helfen.

kaum. Um was für einen µC geht es dann wirklich?

Soll es wirklich eine lib (Library) oder nur eine extra C(PP) Datei 
werden?

> Ich dachte erstmal an sowas wie:
> #define PIN1 PB1
> Aber das kann es auch nicht sein oder?
> Weil ich muss ja dann auch noch DDRx und PORTx in der Library festlegen

dann könnte man einfach

#define LED_PIN PB1
#define LED_PORT PORTA
Gast #5058278
Lesenswert?

Wenn C++ "erlaubt" ist: Library-"Objekt" als Template anlegen, beim 
instantiieren PORT/PIN/Bitmask als Template-Parameter übergeben.

Oder, wenn man's "schön" machen will, eine Template-Abstraktion 
"GPIO-Pin" dazwischenlegen, dann lässt sich das Template auch z.B. mit 
GPIOs an einem I²C-Expander verwenden.

Dank C++ Template-Magie geht das ganze ohne Laufzeit-Overhead.

Aber: du musst den Quelltext mit rausrücken. (was nicht gleichbedeutend 
mit "OpenSource" ist. War früher ganz üblich dass man bei gekaufter 
Software den Quelltext mit dazubekommen hat)
Gast #5058283
Lesenswert?

Hi,

du kannst auch darueber nachdenken die entsprechenden Operationen, z.B. 
Pin Chip-Select setzen, als Funktionszeiger an deine Library zu 
uebergeben. Dann kannst du das ganze sogar durch Dummys ersetzen oder 
auf andere Hardwarearchitekturen übertragen. Habe ich gerade mit Code 
gemacht der sowohl auf einem Atmel AVR als auch auf einem ARM mit 
embedded Linux laufen soll.
Gast #5058297
Lesenswert?

Planlos schrieb:
> Wo ist das Problem dabei?

nur das ich es sehr unschön finde in Headerdateien viel Programmcode zu 
haben. Es ist wird daraus dann keine lib.

Das kann man auch einfach mit C und einer Headerdatei und defines lösen, 
dafür braucht man nicht einmal Templates.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren