KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: [TIPP] Standardausgabe in C/C++ umlenken
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute!

Ich saß gerade an meiner PSP und war fröhlich am Programmieren, als mir das Tippen von "pspDebugScreenPrintf" zu viel wurde.

Kurzerhand tippte ich den Präprozessor-Befehl

Code:
#define pspDebugScreenPrintf printf


ein und erlebte eine Überraschung:Alles, was zuvor auf dem Bildschirm der PSP ausgegeben wurde, wurde nun beim Debuggen mit PSPLink in die Konsole von PSPSH umgelenkt!

Um die ganzen Ausgaben auf dem Bildschirm der PSP zu sehen, muss man lediglich die beiden Befehle vertauschen. So kann man wunderbar debuggen, ohne, dass flackernde Meldungen erscheinen oder man den Umweg über sceIoWrite(1, buffer, strlen(buffer)); gehen muss.

Wollte ich nur mal kurz gesagt haben. Vielleicht hilft es dem einen oder anderen ja, die Debugmeldungen der eigenen Programme auszulesen und quasi "live" mitzuverfolgen.

Oder man könnte es so machen:

Code:
#ifdef DEBUG
#define pspDebugScreenPrintf printf
#else
#define printf pspDebugScreenPrintf
#endif

Brauche ich glaube ich nicht zu erklären Wink

mfg D3lta

P.S.: Ich habe es lediglich nur etwas umgeschrieben Wink
EDIT: Kann jemand bitte einen Link für PSPLink posten?

D3lta :
Oder man könnte es so machen:

Code:
#ifdef DEBUG
#define pspDebugScreenPrintf printf
#else
#define printf pspDebugScreenPrintf
#endif

Brauche ich glaube ich nicht zu erklären Wink

mfg D3lta

P.S.: Ich habe es lediglich nur etwas umgeschrieben Wink


Das ist natürlich die schönere Variante, aber um diese Uhrzeit war ich sowieso erstaunt, dass noch irgendeine Zeile funktioniert, die ich da tippe Big Grin

wurzelbums :

D3lta :
Oder man könnte es so machen:

Code:
#ifdef DEBUG
#define pspDebugScreenPrintf printf
#else
#define printf pspDebugScreenPrintf
#endif

Brauche ich glaube ich nicht zu erklären Wink

mfg D3lta

P.S.: Ich habe es lediglich nur etwas umgeschrieben Wink


Das ist natürlich die schönere Variante, aber um diese Uhrzeit war ich sowieso erstaunt, dass noch irgendeine Zeile funktioniert, die ich da tippe Big Grin


Kenne ich Big Grin
Hast du denn einen Link für mich?
Ich würde psplink auch gerne ausprobieren Wink

mfg D3lta

D3lta :
Kenne ich Big Grin
Hast du denn einen Link für mich?
Ich würde psplink auch gerne ausprobieren Wink


PSPLink ist doch bei der Toolchain dabei. Ich entwickle auf einer Ubuntu-VM, da der Host (OSX) ein paar Probleme mit dem Compiler hat.

Im Ordner (pspsdk)/bin liegt die usbhostfs_pc bzw. usbhostfs_pc.exe, die musst Du einmal aus deinem Projektpfad heraus starten oder sie mit dem Argument deines Projektpfades aufrufen.

Außerdem liegt da die pspsh bzw. pspsh.exe, die dir die Verbindung zur PSP herstellt, über die Du dann auch mit der PSP kommunizierst.

Und wenn Du googelst, dann findest Du auch die ganzen Dateien, die auf die PSP gehören. Ich kann sie Dir auch gerne hochladen, musst nur Bescheid sagen.

Wenn Du dann PSPLink auf der PSP startest, steht im Konsolenfenster von usbhostfs_pc "Connected to device", sofern Du noch keine Treiber für die PSP installiert hast.
Außerdemm sollte dann in dem pspsh-Fenster die Eingabeaufforderung "host0:>" erscheinen. Hier kannst Du dann den Namen Deiner kompilierten PRX angeben und siehe da, sind keine Fehler aufgetreten, wird Dein Programm auf der PSP gestartet.

Das Vorgehen ist schneller, als das Homebrew immer zu kompilieren, die PSP in den USB-Modus zu bringen, die EBOOT zu kopieren und dann das Homebrew wieder zu starten. Wenn das Homebrew abstürzt kannst Du außerdem nachvollziehen, wo es abgestürzt ist. Aber das ist ein (fast) ganz anderes Thema...

Oh, soetwas habe ich schon gesucht ^^
Es wäre sehr nett, wenn du mir die Dateien hochladen könntest Smile
(Ich nutze ein installiertes Ubuntu)

mfg D3lta

D3lta :
Es wäre sehr nett, wenn du mir die Dateien hochladen könntest Smile


Hier haste:

psplink.zip - Das kommt nach ms0:/PSP/GAME/
scripts.zip - Das kannst Du in jedes Projekt reinkopieren.

Wenn Du dann anfängst zu entwickeln, dann rufst Du nur ein einziges Mal(!!!) die usb_start.sh auf:

Code:
sudo ./usb_start.sh


Nach Eingabe des Root-Passworts kannst Du dann sehen, dass usbhostfs gestartet wurde. Nun drückst Du Strg+A und dann Strg+D. Du bist wieder im Terminal, usbhostfs läuft nun im Hintergrund.

Die run.sh musst Du so anpassen, dass in der zweiten Zeile nicht "<target>.prx", sondern Deine PRX steht. Sonst kommst Du nicht weit damit Wink

Wenn Du jetzt

Code:
./run.sh

aufrufst, dann wird dein Projekt kompiliert, die PRX auf der PSP gestartet und im Anschluss pspsh noch einmal gestartet, damit Du die Ausgaben dann siehst, die das Programm macht.

Happy Debugging! Wink

Morgen muss ich das ausprobieren Big Grin
Für heute lese ich erst einmal den Text über Boost::Thread zu ende Smile

mfg D3lta

P.S.: Eigentlich ist

D3lta :

Code:
#ifdef DEBUG
#define pspDebugScreenPrintf printf
#else
#define printf pspDebugScreenPrintf
#endif

C-Style...
In C++ würde man es glaube ich so machen:

Code:
const bool DEBUG=false;  //bzw true beim debuggen
//...
void print(const char* buffer)
{
   if(DEBUG)
      printf(buffer);
   else
      pspDebugScreenPrintf(buffer);
}

Was auch immer das ist...

Hauptsache, es funktioniert. Big Grin Ich bau' gerne Mixes aus C und C++. Das Projekt ist hauptsächlich C, brauch aber für TinyXML C++...

Und solange das alles geht, wie ich mir das vorstelle... Wayne? Big Grin

Schönen Abend noch!

wurzelbums :
Was auch immer das ist...

Hauptsache, es funktioniert. Big Grin Ich bau' gerne Mixes aus C und C++. Das Projekt ist hauptsächlich C, brauch aber für TinyXML C++...

Und solange das alles geht, wie ich mir das vorstelle... Wayne? Big Grin

Schönen Abend noch!


Gleichfalls Smile
Ich versuche im Moment mir erst einmal reines C++ beizubringen, aber für PSP etc verwende ich wohl erstmal C.
Klassen etc sind zum Glück im SDK implementiert...

mfg D3lta

D3lta :
Morgen muss ich das ausprobieren Big Grin
Für heute lese ich erst einmal den Text über Boost::Thread zu ende Smile

mfg D3lta

P.S.: Eigentlich ist

D3lta :

Code:
#ifdef DEBUG
#define pspDebugScreenPrintf printf
#else
#define printf pspDebugScreenPrintf
#endif

C-Style...
In C++ würde man es glaube ich so machen:

Code:
const bool DEBUG=false;  //bzw true beim debuggen
//...
void print(const char* buffer)
{
   if(DEBUG)
      printf(buffer);
   else
      pspDebugScreenPrintf(buffer);
}

Das eine ist soviel C wie das andere C++ ist.

Es sind Präprozessor Befehle.

Weitere Infos hier http://www.cppreference.com/wiki/de/preprocessor/start.

Referenz-URLs