Forum: Mikrocontroller und Digitale Elektronik Was genau ist ein stack (z.B. CAN-Stack)


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 Jens (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Was genau ist ein Stack?
Ich höre es immer wieder, habe auch schon viel gelesen, kann mir aber 
trotzdem nichts darunter wirklich vorstellen.
Z.B. ein CAN-Stack.
Wenn ich das richtig verstanden habe, ist ein CAN-STack quasi nur 
Software (also Hardware unabhängig), eine art API. Man sagt z.B. 
CAN_INIT(PRIO, NAME)
und der stack initialisiert dann den CAN (setzt Baudrate, setzt die 
IDs).
Sendet, empängt NAchrichten, Fehlerauswertung usw..
Aber was ist dann der Unterschied zu einer lib?
Also ich könnte ja auch die Funktionen in einer Lib packen und hätte 
quasi das selbe.
Gleiches gilt ja auch für Bluetooth-Stack und weitere.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
2 lesenswert
nicht lesenswert
"Stack" heißen die Teile wohl deshalb, weil sich da in der Regel auch in 
der Software das ISO-Schichten-Modell einigermaßen abbildet, d.h. du 
hast eine Applikation, die ruft die Netzwerkschicht, die wiederum ruft 
die Transportschicht etc.

In der Praxis verschmelzen da oft einige Teile, aber eine gewisse 
Schichtung ist in der Regel dennoch erkennbar.

von Teo D. (teoderix)


Bewertung
1 lesenswert
nicht lesenswert

von Jens (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Jörg W. schrieb:
> In der Praxis verschmelzen da oft einige Teile, aber eine gewisse
> Schichtung ist in der Regel dennoch erkennbar.

Dann kann man sich das doch so ähnlich wie eine library vorstellen?
In dieser sind dann noch mal schichten, bis zum versenden der NAchricht 
(beispeil vom CAN)

von Stefan ⛄ F. (stefanus)


Bewertung
-1 lesenswert
nicht lesenswert
Jens schrieb:
> Dann kann man sich das doch so ähnlich wie eine library vorstellen?

Du vegleichst da Äpfel mit Gewässern.

Libraries sind Sammlungen von Funktionen, die man in Programme 
einbindet. Das hat mit Stacks (aufeinander gestapelte Ebenen der 
Software-Architektur) gar nichts zu tun.

Außer das Libraries Stacks und Ebenen enthalten können - aber eben nicht 
müssen. So wie man Äpfel in Gewässer werfen kann, muss man aber nicht.

von Jens (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Stefan ⛄ F. schrieb:
> Du vegleichst da Äpfel mit Gewässern.

Ja mir fällt es auch extrem schwer sich etwas darunter vorzustellen.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Nicht jede Bibliothek enthält einen Protokollstack.

Nicht jeder Protokollstack ist in Form einer Bibliothek aufgebaut.

Es gibt Bibliotheken, die vollständige Protokollstacks enthalten. Es 
gibt Bibliotheken, die Teile eines Protokollstacks enthalten.

Protokollstacks können ganz oder teilweise in Form von 
Software(-bibliotheken) implementiert sein. Protokollstacks können aber 
auch ganz oder teilweise in Form von Hardware oder programmierbarer 
Logik implementiert sein.

Entgegen vielfältiger Darstellungen müssen Protokollstacks nicht dem 
OSI-Schichtenmodell entsprechen bzw. durch dieses darstellbar sein.

Es handelt sich eben um komplett unterschiedliche Betrachtungsweisen.

von Andre (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Jens schrieb:
> Dann kann man sich das doch so ähnlich wie eine library vorstellen?

So wie man heute Librarys definiert (denke da ans Arduino Umfeld), würde 
die Library einen CAN Stack enthalten.
Du rufst nur noch Init(); Send(xyz); auf, der Rest passiert unter der 
Haube.
Dein Programm hätte dann einen CAN Stack, von dem du aber nix 
mitbekommst oder irgendwie in eine Zwischenschicht eingreifen könntest.
Etwas anders wäre das, wenn du den Stack selber baust. Also eine 
"Library" für das Hardware Interface an einen Puffer flanschen, da dann 
irgendein Protokoll drüber bauen, Fehlerbehandlung durchreichen, ...

von Jens (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Andreas S. schrieb:
> Nicht jede Bibliothek enthält einen Protokollstack.
>
> Nicht jeder Protokollstack ist in Form einer Bibliothek aufgebaut.
>
> Es gibt Bibliotheken, die vollständige Protokollstacks enthalten. Es
> gibt Bibliotheken, die Teile eines Protokollstacks enthalten.
>
> Protokollstacks können ganz oder teilweise in Form von
> Software(-bibliotheken) implementiert sein. Protokollstacks können aber
> auch ganz oder teilweise in Form von Hardware oder programmierbarer
> Logik implementiert sein.
>
> Entgegen vielfältiger Darstellungen müssen Protokollstacks nicht dem
> OSI-Schichtenmodell entsprechen bzw. durch dieses darstellbar sein.
>
> Es handelt sich eben um komplett unterschiedliche Betrachtungsweisen.

Also ein Stack kann demnach auch unterschiedlich sein. (Das macht die 
ganze sache nicht einfacher).
Aber z.B. die Implementierung eines Handshakes, Fehlerbehandlung, 
allgemein senden/empfangen kann durch ein Stack erstellt werden, was 
auch nciht in der Applikation aufgerufen werden kann.
Dort wird nur z.B. sendeDaten() aufgerufen. Und der STack kümmert sich 
darum, dass alles richtig abläuft.
Heißt auch, dass die Applikation nach sendeDaten() normal weiterlaufen 
kann (wenn so implementiert) und der Stack dann sendet und überprüft ob 
gesendet worden ist wenn der bus frei ist

von Gerhard O. (gerhard_)


Bewertung
0 lesenswert
nicht lesenswert
Dieser Beitrag ist vielleicht zur Übersicht auch nützlich:

https://en.wikipedia.org/wiki/OSI_model

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Andreas S. schrieb:
> Entgegen vielfältiger Darstellungen müssen Protokollstacks nicht dem
> OSI-Schichtenmodell entsprechen

Das OSI-Modell ist ja auch nur ein Modell, welches die grundlegende 
Schichtung in der Kommunikation zu abstrahieren versucht. Es ist kein 
Dogma. ;-)

von Axel S. (a-za-z0-9)


Bewertung
0 lesenswert
nicht lesenswert
Jens schrieb:
> Andreas S. schrieb:

>> Es handelt sich eben um komplett unterschiedliche Betrachtungsweisen.

> Also ein Stack kann demnach auch unterschiedlich sein. (Das macht die
> ganze sache nicht einfacher).

Das Problem ist, daß du zwei verschiedene Sichtweisen durcheinander 
wirfst. Stack nennt man es, wenn man die logische Abstraktion in 
verschiedene Schichten (Layer) hervorheben möchte. Das OSI Modell kann 
man beispielhaft dafür ansehen, was für Schichten es geben könnte.

Aus Sicht des Anwendungsprogramms sind aber alle Schichten unterhalb der 
Anwendungsschicht ohnehin unsichtbar. Die Dienste und Funktionen der 
Anwendungsschicht stellt dann irgendein API bereit, für C typischerweise 
in Form einer C Library, die Funktionen und Datentypen definiert und 
implementiert.

Die tieferen Schichten des Stacks können Software sein oder Hardware, 
Und wenn es Software ist, kann die in der gleichen Library stecken oder 
in einer anderen. Oder vielleicht auch in einem Betriebssystem. Oder in 
der ROM-Firmware des Controllers. Aus Sicht der Anwendung (und des 
Anwendungsprogrammierers) sind das unwichtige Details. Wichtig ist nur, 
daß alle Schichten des Stacks da sein müssen.

Was die Idee eines Stacks so sexy macht ist, daß man bei geeigneter 
Unterteilung die einzelnen Schichten komplett unabhängig voneinander 
implementieren und auch austauschen kann. Man kann bspw. den ganzen Teil 
des CAN-Stacks oberhalb der Hardware (OSI Schicht 3 aufwärts) unabhängig 
vom µC implementieren. Oder man könnte den Teil unterhalb austauschen 
und statt eines physischen CAN Interface die Nachrichten in RAM-Puffern 
hin und her kopieren und so zwei Prozesse auf dem gleichen Rechner so 
miteinander kommunizieren lassen, als würden sie im CAN Netzwerk 
verteilt laufen.

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.