[archimedes] Re: Systemaufrufe (SWI-Calls) von C aus unter RISC OS

  • From: "Anton Reiser" <anton-reiser@xxxxxxxxxxx>
  • To: archimedes@xxxxxxxxxxxxx
  • Date: Sun, 10 Aug 2014 13:06:35 +0200

In message <fa1f923454.Alex@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
          Alexander Ausserstorfer <bavariasound@xxxxxxxxxxxxxxx> 
wrote:

> In message <dc6c8b3454.Alex@xxxxxxxxxxxxxxxxxxxxxxxxxxxx> you wrote:

>>>> weiß irgend jemand hier im Verteiler wie ich von C aus die
>>>> Betriebssystemroutinen von RISC OS aufrufen kann? Ich habe es mit der
>>>
>>> Vielleicht reicht das kleine Progrämmschen unter
>>> http://www.risc-os.de/artikel/einfuehrung_programmierung/ oder
>>> die folgende Seite.
>>
>> Danke erstmal. Man kann also mittels der Funktion
>>
>> _kernel_swi(...)
>>
>> SWIs aufrufen. Auf den Seiten 94/95 des Buches "Raspberry Pi RISC OS
>> System Programming" von Bruce Smith werden ebenfalls die Funktionen _swi
>> und _swix erwähnt. Was ist denn der Unterschied zwischen diesen drei
>> Funktionen? Gelten diese Funktionen generell nur für die RISC-OS-Version
>> von GCC oder ist das ein allgemeineres Konzept?

> Das ist natürlich gut: Im Buch von Bruce Smith wird nicht angegeben,
> dass man die Dateien

> kernel.h
> swis.h

> mit in den C-Code einbinden muss. Das habe ich erst dank deinem Link
> gemerkt.

Na, das gehört doch zum kleinen C einmaleins.

> Die Bücher sind nicht so gut, wie ich es erwartet habe. Zu viele Lücken,
> zu unvollständig.

Ich kenn da nur Raspberry Pi RISC OS System Programming. Finde das 
ziemlich gut, dahingehend, dass es jeweils einen schönen Überblick und 
Einstieg in die vielen Themen gibt. Dass dabei vieles unerwähnt 
bleiben muss liegt in der Natur der Sache. Da hilft dann das PRM 
weiter, das sich zu oft ins Detail verliert und zu wenig 
Übersichts-Themen bietet.

> kernel.h und swis.h werden bereits mit GCC mitgeliefert. Aber jetzt
> suche ich noch die Dokumentation dazu.

> In swis.h steht z. B.

> | #define PDriver_DeclareDriver          0x080156

> Heißt das, dass beim Aufruf von PDriver_DeclareDriver die Adresse
> 0x080156 angesprungen wird, also genau dort die Routine für den SWI
> abgelegt ist? Ich versuche es nur zu verstehen.

Das ist die SWI-Nummer. Könntest genauso 0x080156 in den Code 
schreiben. Ist dann halt nicht so selbsterklärend.
'PDriver_DeclareDriver' wird dann vom Präprozessor mit '0x080156' 
ersetzt.

> Das erste Programm habe ich jetzt erfolgreich compiliert. Nachdem ich
> OSLib nicht zum Laufen bekomme, versuche ich es jetzt halt so. Ohne SWIs
> zu nutzen dürfte es hier bei mir sonst kaum mit dem Programmieren
> erfolgreich weitergehen.

Was für ein Ziel willst Du denn erreichen. Um RISC OS und die SWI 
besser zu verstehen, ist die _kernel_swi() Form sicherlich gut 
geeignet. Das dauerhaft in Deiner Programmierung zu machen weniger.

Um auf Dauer effizient und SWI-nah zu programmieren, würde ich OSLib 
im Auge behalten. Dann hilft auch das PRM weiter, wenns mit einem 
Funktonsaufruf mal nicht so klappt.

Mit Toolbox lassen sich relativ einfach UI-lastige Programme 
erstellen. Aber die Einarbeitung in Toolbox ist wieder eine andere 
Baustelle.

Sich gleichzeitig mit C und RO Libraries herumzuschlagen ist schon 
eine Herausforderung. Zumal es nur spärlich Beispiele und konkrete 
Doku gibt.

Toni




Other related posts: