Pin + Port an Library weitergeben

Gast #5058233
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
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 #5058262
library schrieb:
> Es soll eine Library werden.

dann kannst du nicht mit defines arbeiten, weil libs unabhängig vom 
Projekt gebaut werden. Damit kannst du nur Zeiger auf Ports verwenden, 
damit sind die zugriffe nicht optimal weil SBI, CBI usw. nicht 
funktionieren.
Gast #5058278
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
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 #5058289
Peter II schrieb:
> nur wird es keine wirkliche Library, er müsste ein Großteil vom Code in
> der Headerdatei schreiben.

Wo ist das Problem dabei?
Angst dass der Compiler zu lange braucht, oder der Build-Prozess zuviel 
Strom frisst?
Gast #5058297
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.
Gast #5058304
Ich habe grad was in einer Library gefunden:
1
#define I2C_SDL_LO      cbi( SDAPORT, SDA)
2
#define I2C_SDL_HI      sbi( SDAPORT, SDA)

Was ist wenn man es so macht?

MFG

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 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.