Ebenen im Programm

Gast #4209733
Lesenswert?
• ▲
▼
Hallo,
ich habe mal eine frage
ich habe ein Programm geschrieben.
In der main-funktion rufe ich funktionen auf, um sachen zu 
initialisieren (z.b. CAN_INIT() )
in CAN_INIT() rufe ich wiederum funktionen auf (z.B. CAN_Baudrate(250))
in CAN_BAUDRATE() beschreibe ich dann die Register.
gibt es noch eine tiefere Ebene? also das was die register beschreibein? 
wie würde das heissen?

Mark
#4209744
Lesenswert?
• ▲
▼
Mark schrieb:
> Hallo,
> ich habe mal eine frage
> ich habe ein Programm geschrieben.
> In der main-funktion rufe ich funktionen auf, um sachen zu
> initialisieren (z.b. CAN_INIT() )
> in CAN_INIT() rufe ich wiederum funktionen auf (z.B. CAN_Baudrate(250))
> in CAN_BAUDRATE() beschreibe ich dann die Register.
> gibt es noch eine tiefere Ebene? also das was die register beschreibein?

Der µC, der die Funktionen dann letzten Endes ausführt, wird seine 
OpCodes sehr wahrscheinlich auch nicht direkt ausführen, sondern im µC 
läuft ein Mikroprogramm welches dann die Schaltvorgänge macht.

> wie würde das heissen?

Sowas hat keinen wirklichen Namen.
Aus wievielen Softwareschichten ein Programm definiert ist eine 
Designsache und ja nachdem werden in komplexeren Programmen schon auch 
mal viele Schichten übereinander gestapelt. Maximal kann man in diesem 
Stapel von Schichten irgendwo Grenzlinien ziehen, die Zuständigkeiten 
voneinander trennen. Eine 'Treiberebene' ist meist für alle Low-Level 
Manipulationen zuständig, was aber nicht bedeutet, dass die Treiberebene 
nur aus 1 Schicht bestehen kann. Je nach Komplexität können das durchaus 
auch schon mal mehr sein.
Gast #4210190
Lesenswert?
• ▲
▼
Die Frage wirkt auf Leute mit gepflegtem Halbwissen etwas
philosophisch. Philosophen suchen aber nach Erkenntnissen,
die der Menschheit bisher nicht klar sind.

Bei Prozessoren und dem Programmaufbau, der sie zum Laufen
bringt, ist den Bibliotheks-Erstellern aber schon klar, was
sie da mit Funktionsaufrufen und eingelagerten Unterprogramm-
aufrufen fabriziert haben.

Sauber programmierten Bibliotheksfunktionen, wie CAN_BAUDRATE()
ist es daher wurscht, ob sie sich gerade 3, oder 11 Ebenen
unterhalb der Ebene der main() Funktion befinden, wenn sie
vielleicht - oder mal nicht - eine weitere Unterfunktion
aufrufen, um direkt auf die Hardware-Register des µC, oder
Prozessors zugreifen.

Hauptsache der Stack ist groß genug, um wieder zum Befehl
nach ihrem Aufruf zurückzufinden...

Das gilt auch für rekursive Algorithmen. Trotz Abstieg in
immer tiefere Ebenen kommen die normalerweise der
Hardware-Ebene keinen Deut näher.

Interrupt-Handler sind OFT dicht an der Hardware des µC
angesiedelt, um schnell auf Zeit- oder Signalereignisse zu
reagieren. - Das MUSS aber nicht sein.
Außerdem "wühlen" sie sich nicht auf die hardware-nächste
Ebene hinunter, sonder unterbrechen den normalen Programmablauf,
um ungestört (eventuell hardware-nahe) Operationen auszuführen.

Antwort schreiben

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.

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.