Statische Bibliothek & diverse Hardwarekonfigurationen

OP #2527139
Hallo,

ich hätte ein paar Fragen zu statischen Bibliotheken (also xxx.a Files):

1. Wenn man die Lib erzeugt (also das xxx.a File) ist das ja schon
compiliert und nicht veränderbar. Wenn ich nun z.B. eine Lib zur
Ansteuerung eines LCD (oder anderer Hardware) schreibe, müsste ich
mich da ja schon auf einen Port festlegen. Z.B. die 8 Datenleitungen
an Port D, Steuerleitungen an Port C usw. Die Routinen würden aber
an anderen Port genauso funktionieren. Wie kann man erreichen, daß das
konfigurierbar bleibt? Im Hauptprogramm könnte man ja definieren, an
welchen Ports was hängt, aber die Lib ist ja schon compliliert?
Oder kann man statische Bibliotheken für solche Zwecke gar nicht nutzen?

2. Wie sieht es mit evtl. leicht unterschiedlichen Portpins, 
I/O-Adressen, etc aus, je nachdem welchen µC ich verwende?
Ich bräuchte ja dann für jeden µC, bzw. Gruppe von µCs die gleich sind, 
eine eigene Lib?

Vielen Dank für Eure Hilfe!

Gruß,
Marcus
Gast
Marcus S. schrieb:
> Oder kann man statische Bibliotheken für solche Zwecke gar nicht nutzen?

Ja und nein...

In eine vorkompilierte lib kannst du nur hardwareunabhängige Dingen 
packen. Alles hardwareabhängige (und dazu gehört im Prinzip auch der 
verwendete Prozessor) muß hardwareabhängig neu compiliert werden.

Oliver
Persönliche Seite
Die Granularität der Bibliotheken macht sich and deren 
Binärkompatibilität fest.

Wenn die Bibliothek also nicht alle Möglichkeiten abdeckt — etwa weil 
ein SFRX bei zu verwendendem Derivat A an einer anderen Stelle liegt als 
bei Derivat B oder anders verwendet wird oder werden muss — dann 
braucht's eine andere Ausprägung der Bibliothek, d.h. sie muß mit 
anderen Optionen generiert werden.

Um solche Abhängigkeiten gering zu halten, d.h. die Granularität der 
Biblioteken möglichst grob zu belassen (also möglichst wenige 
Lib-Ausprägungen), kann man Callbacks einsetzen. In wie weit Callbacks 
bei so hardwarenahen Dingen sinnvoll sind, ist dann im Einzelfall zu 
entscheiden.

ZB könnte man Callbacks für die Ein/Ausgabe einsetzten und hätte damit 
nur noch die Granularität, die etwa durch nicht-binärkompatible Hardware 
erzwunden wird.

Ein Callback könnte etwa "Output Byte" sein. Bei 4-Bit anbindung gibe 
die Funktion 2 Nibbles aus, ansonsten ein Byte. Aber die LCD-Routinen 
wissen nix davon und müssen Callback-Aufrufe u.U paranoid behandeln, 
d.h. etwa IRQ deaktivieren um Gliches zu vermeiden. Oder die 
Callback-Implementierungen müssen sich darum kümmern. Wie das geschieht, 
legt das Lib-ABI fest.

Eine weitere Option wäre das nicht als Bibliothek zu haben, sondern als 
Quell-Repository.

Antwort schreiben

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