Forum: Mikrocontroller und Digitale Elektronik Wie funktioniert eine API Implementierung ?


von Patrick S. (patrick7901)


Lesenswert?

Hallo zusammen,

ich habe ein Verständnisproblem was das Thema API angeht. :-(

Ich habe schon oft gelesen das in µC-firmware eine API eingebaut ist
über diese man dann die firmware-funktionen ausführen kann.

Wie muß ich mir das vorstellen bzw. wie läuft dann die Programmierung
des Anwenderprogrammes in den µC ab!!???

Ich möchte mich diesem Thema annehmen und in einem Atmega32 zu
Testzwecken diese Art der µC-Programmierung ausprobieren....

Im voraus schon DANKE für alle Antworten.

Grüsse Patrick

von Oliver (Gast)


Lesenswert?

Was genau du irgendwo gelesen hat, weiß ich zwar nicht, aber ein API zu 
einer Firmware (Application Programming Interface) ist nichts anderes 
als Windows oder linux auf deinem Computer. Da gibt es einen Satz 
Funktionen, die im Gerät eingebaut sind, und vom Anwenderprogramm 
aufgerufen werden können, ohne das sie zum Programm hinzugelinkt werden 
müssen, oder der Anwender überhaupt weiß, wie sie intern realisiert 
sind.

Was an Thema annehmenswürdig ist, keine Ahnung. Die Technik ist fast so 
alt wie die Computer. Selbst PC-Prozessoren laufen intern mit "Firmware" 
(genannt Microcode), da ist das API der Assembler.

Oliver

von Patrick S. (patrick7901)


Lesenswert?

Der ganze Grundgedanke ist dieser - dass ich meine Schaltung(en) an 
einen Bus (evt. CAN) anbinden möchte und dann verschiedene 
Anwenderprogramme über diesen auf den µC programmieren möchte...

Patrick

von Andreas K. (derandi)


Lesenswert?

Etwas weiter gefasst könnte man auch diverse Libarys als API`s 
betrachten, beim Programmieren kann man auf die enthaltenen Funktionen 
zurückgreifen, auch ohne zu wissen was sie genau tut.

Programmieren über CAN-Bus, ob man das mit nem Boot-Loader 
zusammenwursteln könnte?

von ... (Gast)


Lesenswert?

> auch ohne zu wissen was sie genau tut
Da muß ich doch heftigst widersprechen! Wenn man eine Funktion benutzen 
will, sollte man schon sehr genau wissen WAS sie tut. Was man nicht 
unbedingt wissen muß, ist WIE sie es tut.

von Oliver (Gast)


Lesenswert?

>dass ich meine Schaltung(en) an
>einen Bus (evt. CAN) anbinden möchte und dann verschiedene
>Anwenderprogramme über diesen auf den µC programmieren möchte...

Hä?

Was willst du wo warum worüber programmieren, und was hat das mit API's 
und Firmware zu tun?

Oliver

von Peter D. (peda)


Lesenswert?

Ein API-Call ist nichts weiter, als ein Funktionsaufruf von einem 
Programm zu einem anderen Programm.
Der Aufruf erfolgt entweder per Softwareinterrupt oder an eine feste 
Adresse.
Was der API-Call ausführen soll, entscheidet er anhand einer 
Funktionsnummer in einem Register.

Der Funktionsumfang des API ist völlig beliebig.
Bei MCs mit Factory-Bootloader kann man z.B. eine Funktion aufrufen, die 
den Flash beschreibt.


Peter

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Wobei das natürlich nicht auf C-Funktionen beschränkt ist.

Grob übersetzt ist ein API ein Bündel von zur Verfügung gestellten 
Funktionen (im allgemeinen Sinn). Wie man die nun aufruft, ist 
nebensächlich.

In meinen AVR-Controllern werkelt z.B. ein Tcl-Kern, der meinen Skripten 
spezielle Funktionen per Tcl-Befehl zur Verfügung stellt, eben ein API.

In meinen Skripten ist z.B. der Befehl "ctrl" für controllerspezifische 
Dinge zuständig, stellt also für die Anwendung (=Skript) entsprechende 
Funktionen (Ausgabe über CAN/RS-232 usw.) zur Verfügung:

set ausgabe "Test"
ctrl can out $ausgabe

gibt also "Test" auf dem CAN-Bus aus, egal, welchen Controller (AVR, 
PIC, ARM, i386) ich einsetze. Dank des API sind die Programme also auf 
beliebigen Maschinen lauffähig (ich kann hier also auf dem PC meine 
Programme in Ruhe testen - ohne hochladen, JTAG und allen anderen 
Krücken).

Natürlich gibt es bzgl. Echtzeit/Interruptverhalten einiges zu beachten 
- aber da gibt es passende Kniffe :-)

Chris D.

von Klaus (Gast)


Lesenswert?

Darf ich die API so verstehen z.B. ein paar Warteschleifen, 
Kommunikation mit  RS232, etc. sind auf dem µC und würde dann per 
Bootloader ein Programm überspielen (ohne zu Flashen) und diese 
Funktionen nutzen die hinterlegt sind.

von Patrick S. (patrick7901)


Lesenswert?

Hallo,

danke für die vielen Antworten...

@ Oliver:
Ich möchte die Protokoll-Implementierung für meinen Bus fest im µc 
haben,
aber verschiedene Anwenderprogramme(digital I/O, analog I/O, 
Stellantrieb,...) in den Controller über den Bus programmieren.

Ziel ist ein flexibles Bus-Modul zu bauen bei dem immer nur die 
Anwendungs-
hardware (Relais,Temp-Sensor,...) sich ändert - und ich nur die
passende Anwendersoftware überspielen muss.


Wie muss ich mir denn das Zusammenspiel zwischen Firmware-Funktion
(z.B. Wert senden) und Anwendungsprogramm vorstellen?

In der Firmware schreibe ich eine Funktion (wie in jedem üblichen 
Programm)
das eine Übergabevariable erwartet und diese auf den Bus sendet...

Jetzt zu meinem Verständnisproblem:
Wie rufe ich die Funktion aus meinem nachträglich eingespielten 
Anwenderprogramm auf?????????????

von Chris D. (myfairtux) (Moderator) Benutzerseite


Lesenswert?

Klaus wrote:
> Darf ich die API so verstehen z.B. ein paar Warteschleifen,
> Kommunikation mit  RS232, etc. sind auf dem µC und würde dann per
> Bootloader ein Programm überspielen (ohne zu Flashen) und diese
> Funktionen nutzen die hinterlegt sind.

Wenn Du mich meinst:

Ja, so in etwa. Alles, was µC-spezifisch ist + der Tcl-Interpreter ist 
bereits auf dem Chip. Das eigentliche Anwendungsprogramm wird bei mir 
z.B. in ein einen externen Atmel-Flash mit z.B. 16MBit abgelegt und 
einem SRAM.

Dadurch, dass ich den Code interpretiere, habe ich für "langsame" Sachen 
in reinem Tcl praktisch unbegrenzt Speicher zur Verfügung.
Die zeitkritischen Sachen stecken in der API.

Chris

von Uhu-Hunter (Gast)


Lesenswert?

> Ein API-Call ist nichts weiter, als ein Funktionsaufruf von einem
> Programm zu einem anderen Programm.
> Der Aufruf erfolgt entweder per Softwareinterrupt oder an eine feste
> Adresse.

Ne Peter, da interpretierst Du viel zu viel rein.

Ein API ist nichts anderes als eine Schnittstellendefinition. Das kann 
von bis gehen und die Implementation und die Details sind vollkommen 
beliebig.

Ein "API-Call" ist nichts weiter als ein Aufruf irgendeiner 
Funktionalität der definierten Schnittstelle. Wie das konkret gelöst 
ist, ist völlig wurscht und ist (oft/meistens) Bestandteil des API.

Ein API kann von einem Betriebssystem, einer shared Library, einem Stück 
Source-Code, einem Netzwerkdienst oder sonst etwas zur Verfügung 
gestellt werden.

von Patrick S. (patrick7901)


Lesenswert?

Hallo,

Kann ich mir das dann so vorstellen:

Ich schreibe in ein Übergabe-Register einen Wert und löse danach einen 
Software-Interrupt aus,

die Interrupt-Rountine wertet den Wert im Register aus und ruft die 
damit verknüpfte Funktion auf.

Gruss Patrick

von Oliver (Gast)


Lesenswert?

So wird das seit Urzeiten gemacht. Wenn die Register nicht ausreichen, 
kannst du die Parameter auch auf den Stack legen.

Oliver

von Patrick S. (patrick7901)


Lesenswert?

Hallo,

dann erstmal herzlichen DANK .......

Werde mich nun mal an ein Stück Code wagen und das ganze ausprobieren,
schein ja nicht zu kompliziert zu sein wenn man sich nicht selbst im
Weg steht :-)

Gruss Patrick

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.