brechbunkt schrieb:
> Was ich allerdings nirgends finden kann ist, wie ich es überhaupt
> verwenden kann. Hat jemand Semihosting schon mal verwendet und könnte
> ein paar Tipps geben?
Ich versteh nicht, was du daran nicht verstehst. Die ARM-Leute
empfehlen, einfach für die betreffenden Funktionen einen SVC zu
definieren. Dieser führt dann in eine Art Betriebssystem auf dem uC, wo
sie dann entweder direkt und voll ausgeführt werden oder (=Semihosting)
über irgend einen Kommunikationskanal auf einen PC geleitet wird, wo sie
dann dort ausgeführt wird. Klingt kompliziert, ist es aber nicht.
Guck dir mal in der Codesammlung die Lernbetty an (mußt ein bissel nach
unten paddeln). Dort kannst du sehen, wie die SVC (Supervisorcalls)
realisiert sind. Beim Keil geht das direkt und so wie gedacht, bloß die
GCC-Benutzer gehen leer aus, denn der GCC kann keine SVC's, da ist mal
wieder Gebastel angesagt.
Beispiel:
Man will einen String auf dem Bildschirm ausgeben. Funktion dazu ist
int CgStr_at (int x, int y, char* P, word FontMode);
Bei der Lernbetty sieht das dann so aus:
__swi(19) int CgStr_at (int x, int y, char* P, word FontMode);
Anstelle eines Calls baut der Compiler einen Software-Interrupt mit der
Nummer 19 in den Code ein. Dadurch landet die Ausführung in der
BettyBase und wird dort so ausgeführt, daß der Text auf dem lokalen
Bildschirm ausgegeben wird.
Beim Semihosting würde in der BettyBase ein Handler stehen, der die
Argumente (X, Y, Text und Font+Farbe) z.B. über eine serielle Verbindung
zum PC schickt, wo ein anderer Handler, der diese Nachricht versteht,
selbige auf dem Bildschirm des PC (oder einem Fenster auf dem BS)
ausgibt.
Nun alles klaro?
W.S.