Forum: Mikrocontroller und Digitale Elektronik Pin + Port an Library weitergeben


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von library (Gast)


Bewertung
0 lesenswert
nicht 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

von Peter II (Gast)


Bewertung
0 lesenswert
nicht 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

von Ralf G. (ralg)


Bewertung
0 lesenswert
nicht lesenswert
Wie hast du das sonst umgesetzt? Also in deinen Modulen/ 
Funktionssammlungen die nicht zu einer Bibliothek gelinkt wurden?

von library (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter II schrieb:
> Soll es wirklich eine lib (Library) oder nur eine extra C(PP) Datei
> werden?
Es soll eine Library werden.

Peter II schrieb:
> Um was für einen µC geht es dann wirklich?
In meinem Testfall verwende ich einen ATmega328p.

Ralf G. schrieb:
> Wie hast du das sonst umgesetzt?
Ich hab das so in dieser Art noch nie gebraucht.

MFG

von Mitlesa (Gast)


Bewertung
0 lesenswert
nicht lesenswert
library schrieb:
> Es soll eine Library werden.

Der Begriff wird im Zusammenhang mit Arduino und ausserhalb
der Arduino-Welt ganz unterschiedlich aufgefasst.

Deshalb erst mal genau sagen was du willst.

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Ein Weg:
Arduino hält Aufdrösel Tabellen im Flash, mit den zugehörigen 
Funktionen, welche auf diesen Tabellen reiten.

Mein Weg: https://www.mikrocontroller.net/attachment/highlight/319176

Vielleicht kannste dir ja bei den beiden Varianten was abschauen.

von library (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Mitlesa schrieb:
> Der Begriff wird im Zusammenhang mit Arduino und ausserhalb
> der Arduino-Welt ganz unterschiedlich aufgefasst.

Mit Arduino hab ich gar nichts am Hut.
Ich arbeite mit AVR-Studio (C), ISP und immer selbstaufgebauter 
Hardware.

von Planlos (Gast)


Bewertung
0 lesenswert
nicht 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)

von dupdup (Gast)


Bewertung
0 lesenswert
nicht 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.

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Planlos schrieb:
> Dank C++ Template-Magie geht das ganze ohne Laufzeit-Overhead.

nur wird es keine wirkliche Library, er müsste ein Großteil vom Code in 
der Headerdatei schreiben.

von Planlos (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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?

von Peter II (Gast)


Bewertung
0 lesenswert
nicht 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.

von library (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
Um Portpins einfach zu definieren, kann man meine sbit.h benutzen:

Beitrag "Re: Problem mit Befehl SET"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.