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
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
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
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?
> 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.
>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
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
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.
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.
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?????????????
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
> 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.
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
So wird das seit Urzeiten gemacht. Wenn die Register nicht ausreichen, kannst du die Parameter auch auf den Stack legen. Oliver
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.