amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > AHI im PPC-Programm benutzen [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

12.06.2003, 14:26 Uhr

alexw
Posts: 137
Nutzer
Hallo.

Ich würde gerne in einem PPC-Programm AHI für die Sound-Ausgabe benutzen, und zwar die Device-Schnittstelle. Ich habe das mal ganz naiv angepackt und das Ganze so angesprochen, wie ich es in einem 68k-Programm machen würde. Es geht zwar, aber es ist ziemlich absturzfreudig: Manchmal bleibt die Soundroutine einfach hängen und sehr oft meldet der Task Defiant den Fehler "Corrupt memory list detected in FreeMem" am Ende des Programms.
Da es bisher keine Probleme gab, wenn ich es unter 68k compilierte, denke ich mal, dass man es nicht so naiv machen sollte und auf die Wechselwirkungen zwischen den beiden Prozessoren achten sollte. Hat jemand Erfahrung damit und kann mir die wichtigsten Problemlösungen verraten?
Wie gesagt benutze ich die Device-Schnittstelle und möchte per Double-Buffering die Sound-Ausgabe das ganze Programm über laufen lassen.
Auf die Idee, ein Mixed-Binary zu benutzen, bin ich auch schon gekommen, aber irgendwie scheint StormC4 (GCC) damit so seine Probleme zu haben.

Alex.

[ - Antworten - Zitieren - Direktlink - ]

20.06.2003, 09:03 Uhr

alexw
Posts: 137
Nutzer
Hallo???

Hat denn hier wirklich noch niemand AHI von der PPC-Seite aus benutzt und kann mir ein paar Ratschläge geben, was man beachten muss und ob man überhaupt etwas beachten muss? Bitte, bitte? ;(

Alex.

[ - Antworten - Zitieren - Direktlink - ]

20.06.2003, 10:33 Uhr

thomas
Posts: 7718
Nutzer

Ich habe mich noch nie mit AHI beschäftigt, aber generell ist meine Erfahrung, daß man Programme für PPC einfach nur neu kompilieren muß. Allerdings benutze ich nicht StormC, sondern VBCC. Das einzige, was man beachten muß, ist daß jeder OS-Funktionsaufruf ein Context-Switch ist, die sollte man natürlich minimieren. Man merkt das besonders, wenn man mit Move() und Draw() eine Grafik malt. Da bietet sich dann DrawBorder() an.

Kann es sein, daß dein Stack zu klein ist ? PPC-Programme benötigen häufig viel Stack-Speicher.

Oder hast du Alignment-Probleme ? In PPC-Programmen werden Datenstrukturen üblicherweise auf Wortgrenzen angepaßt. Bei VBCC gibt es einen Schalter -amiga-align, mit dem man das abschalten kann.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

20.06.2003, 11:27 Uhr

alexw
Posts: 137
Nutzer
Zitat:
Original von thomas:
Ich habe mich noch nie mit AHI beschäftigt, aber generell ist meine Erfahrung, daß man Programme für PPC einfach nur neu kompilieren muß. Allerdings benutze ich nicht StormC, sondern VBCC. Das einzige, was man beachten muß, ist daß jeder OS-Funktionsaufruf ein Context-Switch ist, die sollte man natürlich minimieren. Man merkt das besonders, wenn man mit Move() und Draw() eine Grafik malt. Da bietet sich dann DrawBorder() an.

Die Geschwindigkeit ist nicht so das Problem. Das Spiel wird zwar durch Benutzung von AHI spürbar langsamer, aber es ist immer noch sehr gut spielbar. Es ist ja auch nicht unbedingt ein Action-Spiel.
Zitat:
Kann es sein, daß dein Stack zu klein ist ? PPC-Programme benötigen häufig viel Stack-Speicher.
Nun, ich habe die Sound-Routine in einem eigenen Task laufen. Und da dieser nur eine Schleife enthält, die den Sound-Kram erledigt, und nichts irgendwie rekursives enthält, dürfte der Stack wohl kein Problem sein, oder?
Ich habe mich schon gefragt, ob die Probleme damit zusammenhängen, dass ich die PPC-Task-Funktionen falsch benutze, aber wenn ich das ganze Sound-Zeug entferne, gibt's keine Probleme. Allerdings gibt's mit Sound schließlich auch nur ab und zu Probleme. Vielleicht sind sie bei dem Test nur zufällig nicht aufgetreten? Ich muss es mal nochmal ausprobieren...
Zitat:
Oder hast du Alignment-Probleme ? In PPC-Programmen werden Datenstrukturen üblicherweise auf Wortgrenzen angepaßt. Bei VBCC gibt es einen Schalter -amiga-align, mit dem man das abschalten kann.
Das ist vielleicht wirklich ein Problem. Weiß jemand, wie oder ob das bei StormC geht?

Wie sieht es aber damit aus, dass das 68k-Device und meine PPC-Routine auf den gleichen Message-Port zugreifen? Kann es sein, dass es dadurch, dass die beiden Prozessoren verschiedene Caches haben, zu Problemen kommt?
Ich erstelle hier einen 68k-Message-Port, weil das Device wohl mit PPC-Message-Ports nicht umgehen kann. Und deshalb benutze ich im PPC-Programm die normalen Exec-Routinen. Ist das so richtig?

Alex.

[ - Antworten - Zitieren - Direktlink - ]

20.06.2003, 11:53 Uhr

gni
Posts: 1106
Nutzer
Zitat:
thomas:
Oder hast du Alignment-Probleme ? In PPC-Programmen werden Datenstrukturen üblicherweise auf Wortgrenzen angepaßt.

Wenn Du mit "Wort" 32Bit meinst, dann stimmts :)
Zitat:
Bei VBCC gibt es einen Schalter -amiga-align, mit dem man das abschalten kann.
Damit bekommt man dann die unter AmigaOS/68k üblichen 16bit Alignment. Das Problem ist nur, das das den PPC merklich bremst.

[ - Antworten - Zitieren - Direktlink - ]

20.06.2003, 13:42 Uhr

thomas
Posts: 7718
Nutzer
Zitat:
Wenn Du mit "Wort" 32Bit meinst, dann stimmts

Ich meine immer alles so, daß es stimmt :-)

"Wort" ist über Plattformen hinweg nicht immer gleich definiert. Die einzige Gemeinsamkeit, die (fast) überall stimmt, ist daß ein Wort ein oder mehrere Bytes enthält.

Ich war mir aus dem Gedächtnis nicht sicher, ob es 4 Bytes waren, deshalb habe ich es etwas vager formuliert.

Zitat:
Nun, ich habe die Sound-Routine in einem eigenen Task laufen.

Das könnte den Unterschied ausmachen. Wie hast du den anderen Task gestartet ? Was macht der ? Hast du AHI in dem Subtask geöffnet, oder in der Haupttask ? IIRC schreibt die AHI-Doku, daß man AHI in jedem Task selber öffnen muß.

Hast du AHI mal in einem kleinen Programm alleine ausprobiert ?

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

20.06.2003, 14:27 Uhr

alexw
Posts: 137
Nutzer
Zitat:
Original von thomas:
Zitat:
Nun, ich habe die Sound-Routine in einem eigenen Task laufen.

Das könnte den Unterschied ausmachen. Wie hast du den anderen Task gestartet ?

CreateTaskPPCTags(TASKATTR_CODE,(int)soundproc,TASKATTR_NAME,"soundta sk",TASKATTR_INHERITR2,TRUE,TAG_DONE);
Zitat:
Was macht der ?
Er initialisiert AHI und geht dann in eine Schleife, wo er per Double Buffering Musik aus einer Datei abspielt. Außerdem wartet er noch auf Messages von außen, die ihm sagen können, daß er die Musik stoppen, eine andere Datei abspielen oder sich beenden soll. Diese Messages werden natürlich über die WarpOS-Funktionen verschickt und empfangen.
Zitat:
Hast du AHI in dem Subtask geöffnet, oder in der Haupttask ? IIRC schreibt die AHI-Doku, daß man AHI in jedem Task selber öffnen muß.
Das hab ich zwar nicht in der AHI-Doku gesehen, hab's aber trotzdem im Subtask geöffnet.
Zitat:
Hast du AHI mal in einem kleinen Programm alleine ausprobiert ?
Zu allererst ja. Wenn ich mich recht erinnere, hat er damals auch ab und zu solche Fehler gebracht, bin mir aber nicht sicher. Ich habe dann auch ein paarmal einen kleinen Programmierfehler von mir gefunden und dachte, dass es daran lag. Danach lief's scheinbar gut, und ich habe es erweitert. Aber in der aktuellen Version läuft es auch mal bei unzähligen Tests einwandfrei und dann am nächsten Tag oder so gibt's jedesmal diese blöde Meldung. In seltenen Fällen setzt auch die Musik völlig aus und wenn das Spiel eine Message schicken will, bleibt auch es hängen, also wird die Nachricht scheinbar nicht beantwortet. Ich bin schon den Code zigmal durchgegangen und konnte keinen Fehler finden. Unter 68k scheint's ja auch zu gehen.

Alex.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > AHI im PPC-Programm benutzen [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.