|
Verfasser |
Nachricht |
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
[TUT] PSP Hello World in C
Hallo Community,
ich habe mich mal entschieden ein Hello World TuT für die kleinen PSP Devs zu machen
Hab es versuch so Anfänger freundlich wie möglich zu machen aber ihr solltet eine Gewisse C/C++ Kenntnis haben wenn ihr mit der PSP anfangen wollt
Ihr brauch dazu ein normalen Editor (ich benutze immer Dev-C++) und ein PSP SDK sucht euch bei Google eins aus
Als erstes werden wir die Header-Dateien mit
"#include < ... >"
bestimmen. Was Header sind solltet ihr wissen ansonsten schnell weg
So wir werden 2 Header-Dateien verwenden:
Die erste ist "pspkernel.h" diese enthält alle spezifischen Codes der PSP, ohne sie würde unser Programm nicht gehen.
Die nächste Header-Datei ist "pspdebug.h" sie enthält nützliche Funktionen zur Fehlerbeseitigung.
Also fügen wir nun folgendes ein:
#include <pspkernel.h> #include <pspdebug.h>
Nun werden wir der PSP etwas über das Programm sagen, dies ist nötig, also bitte nicht vergessen . Das was in den Anführungsstrichen steht " ... " ist der Name (aber nicht der, der im XMB angezeit wird).
So fügt nun das ein :
PSP_MODULE_INFO("Hello World", 0,1,1);
So da der Befehl bei der PSP für die Textausgabe "pspDebugScreenPrintf" heißt aber wir das nicht immer schreiben wollen werde wir den Befehl umbenennen in printf (wie man es ja schon vom C für den PC gewöhnt ist).
Der Compiler nimmt also printf als pspDebugScreenprintf auf.
Also definieren wir "printf" durch "pspDebugScreenPrintf" so:
#define printf pspDebugScreenPrintf
Nun der folgende Code ist um einiges Komplizierter aber ihr müsst ihn auch nicht verstehen dennoch werde ich euch ein bisschen erklären.
Dieser Code enthält Funktionen, die in unserem Programm aufgerufen werden. Durch den Code können wir die PSP-Software über die Home-Taste verlassen. Schreibt nun das in eure main.c :
---------------------------------------------------------------------------------------------------
/* Exit callback */ int exit_callback(int arg1, int arg2, void *common) { sceKernelExitGame(); return 0; }
/* Callback thread */ int CallbackThread(SceSize args, void *argp) { int cbid;
cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();
return 0; }
/* Sets up the callback thread and returns its thread id */ int SetupCallbacks(void) { int thid = 0;
thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0); if(thid >= 0) { sceKernelStartThread(thid, 0, 0); }
return thid; }
---------------------------------------------------------------------------------------------------
So das sollte jeder wissen:
------------------------------
int main() {
------------------------------
So nun werden wir zwei Funktionen mit dazu nehmen und zwar
pspDebugScreenInit() erlaubt uns etwas auf dem Bildschirm auszugeben .
und
SetupCallbacks() erlaubt uns mit der Home-Taste zurück ins XMB zu kommen (ein Callback).
Also schreibt nun das in eure main.c :
----------------------------------------
pspDebugScreenInit();
SetupCallbacks();
----------------------------------------
Erinnert ihr euch noch daran das wir ganz oben pspDebugScreenPrintf in printf umbenannt haben, deswegen können wir nun einfach printf für die Textausgabe verwenden
Der Text der in Anführungsstrichen (" .... ") steht, ist der Text der auf dem PSP Bildschirm ausgegeben wird.
Also übernehmt das in eure main.c :
----------------------------------------------
printf("Hello World\n");
-----------------------------------------------
So nun versetzten wird das Programm noch in einen Pause Modus, weil ohne die Funktion würde das Hello World noch nicht mal 1 sek angezeigt werden und das wollen wir ja nicht.
Also benutzen wir dazu:
----------------------------------------------
sceKernelSleepThread();
Übernehmt das auch in eure main.c
----------------------------------------------
Sollte man verstehen
-----------------------------------------------
return 0;
-----------------------------------------------
Nun noch ein } um die Main Funktion zu beenden:
-----------------------------------------------
}
-----------------------------------------------
So nun hab ihr eure main.c fertig jetzt kommen wir zum Makefile
---------------------------------------------------------------------------------------------------
So nun das Makefile, dass macht nicht anderes als dem Compiler zu sagen wie wir die main.c Kompiliert haben wollen und sagt auch das der Compiler die main.c in ein EBOOT.PBP machen soll :
--------------------------------------------------
TARGET = hello
OBJS = main.o
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Hello World
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak
--------------------------------------------------
( PSP_EBOOT_TITLE = Hello World ) sagt dem Compiler wie der EBOOT.PBP ( im XMB der PSP ) heißen soll.
So das wars jetzt müsst ihr das alles nur noch mit dem PSPSDK Kompilieren und fertig ist euer erstes PSP Programm.
Ich wünsch euch noch viel Spaß bei rum probieren
Diese Datei muss main.c heißen
#include <pspkernel.h>
#include <pspdebug.h>
PSP_MODULE_INFO("Hello_World", 0, 1, 1);
#define printf pspDebugScreenPrintf
//------------------------------------------------------------------------------
/* Exit callback */
int exit_callback(int arg1, int arg2, void *common) {
sceKernelExitGame();
return 0;
}
/* Callback thread */
int CallbackThread(SceSize args, void *argp) {
int cbid;
cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();
return 0;
}
/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void) {
int thid = 0;
thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0) {
sceKernelStartThread(thid, 0, 0);
}
return thid;
}
//------------------------------------------------------------------------------
int main()
{
pspDebugScreenInit();
SetupCallbacks();
printf("Hello World\n");
sceKernelSleepThread();
return 0;
}
Das Makefile darf keine Endung haben also darf nicht .txt oder haben.
Macht einfach beim Texteditor Speicher unter den Dateityp auf "Alle Dateien" Und nennt es: Makefile. so habt ihr ein Makefile ohne Datei Endung
Noch was die main.c und das Makefile müssen im selben Ordner liegen
PS: Danke an PSP_Lord er hat mich in 2 kleinen Dingen verbessert
Hoffe es hat euch gefallen
mfg
stehn
Dieser Beitrag wurde zuletzt bearbeitet: 03.03.2011 13:15 von dark-awesome.
|
|
03.03.2011 13:00 |
|
Folgende User bedanken sich: |
|
3m!n
Legende
Beiträge: 1.652
Gruppe: User
Registriert seit: Aug 2010
Status:
Offline
Danke erhalten: 951
|
RE: [TUT] PSP Hello World in C
Gutes Tutorial,
Leicht verstendlich,
nur eins ist komisch:
Wieso hast du die ganzen codes nicht auhc in ne Codebox gesteckt ?
mfg
|
|
03.03.2011 13:10 |
|
|
|
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: [TUT] PSP Hello World in C
Gutes Tutorial,
Leicht verstendlich,
nur eins ist komisch:
Wieso hast du die ganzen codes nicht auhc in ne Codebox gesteckt ?
mfg
Weil ich die immer so mit Farbe mache kenne das halt so
Dieser Beitrag wurde zuletzt bearbeitet: 03.03.2011 13:21 von dark-awesome.
|
|
03.03.2011 13:13 |
|
|
|
-blue7
/dev/null/
Beiträge: 1.926
Gruppe: Mod a.D.
Registriert seit: May 2009
Status:
Abwesend
Danke erhalten: 1768
|
RE: [TUT] PSP Hello World in C
So da der Befehl bei der PSP für die Textausgabe "pspDebugScreenPrintf" heißt aber wir das nicht immer schreiben wollen werde wir den Befehl umbenennen in printf (wie man es ja schon vom C für den PC gewöhnt ist).
Der Compiler nimmt also printf als pspDebugScreenprintf auf.
Also definieren wir "printf" durch "pspDebugScreenPrintf" so:
#define printf pspDebugScreenPrintf
Falsch, was du da postest! Der Compiler nimmt weder printf als pspDebugScreenprintf auf, noch wird hier irgendein Befehl umbenannt! Schonmal was von Präprozessor gelesen? Anscheinend nicht, lern' erstmal die Grundlagen
[Ex-Moderator] ; [Ubuntu-User] ; [Designer] ; [Coder] ;
running out of bugs`.
___________________________________________
#define TRUE FALSE // Happy debugging suckers
// sometimes I believe gcc ignores all my comments
|
|
06.03.2011 13:20 |
|
Folgende User bedanken sich: |
|
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: [TUT] PSP Hello World in C
Oha mach mal halb lang das hab ich so gelernt -.-
Also muss ich mich halt noch mal Informieren und komisch das bei jeden TuT nur negative kommt -.-
Ich habe das nun so gelernt wenn man das macht der Kompiler dann jedes mal bei printf die Funktion pspDebugScreenPrintf nimmt also sorry muss ich halt noch mal im Inet mich schlau machen.
|
|
07.03.2011 16:21 |
|
|
|
Italia-boy
King
Beiträge: 2.834
Gruppe: User
Registriert seit: Oct 2010
Status:
Offline
Danke erhalten: 1161
|
RE: [TUT] PSP Hello World in C
Oha mach mal halb lang das hab ich so gelernt -.-
Also muss ich mich halt noch mal Informieren und komisch das bei jeden TuT nur negative kommt -.-
Ich habe das nun so gelernt wenn man das macht der Kompiler dann jedes mal bei printf die Funktion pspDebugScreenPrintf nimmt also sorry muss ich halt noch mal im Inet mich schlau machen.
Da muss ich dir schon irgendwie rechtgeben. Bei jedem TuT was schlechtes.
Aber Danke jetzt weiß ich was de PSP für befehle braucht.
PS: Ich will noch nicht mit der PSP anfangen ich mach erstmal für den PC weiter. War halt nur meine neugier
Xbox - Fanboy ^^
|
|
07.03.2011 16:26 |
|
Folgende User bedanken sich: |
|
-blue7
/dev/null/
Beiträge: 1.926
Gruppe: Mod a.D.
Registriert seit: May 2009
Status:
Abwesend
Danke erhalten: 1768
|
RE: [TUT] PSP Hello World in C
@stehn
Wir wollen dich hier doch nicht fertig machen. Es gibt genug Hello World Tutorials für die PSP im Netz, jetzt hast du auch noch eins gemacht. Gut, jeder erklärt es vielleicht etwas anders, aber im Endeffekt kommt's auf's selbe hinaus.
Sieh's als Kritik, jeder hat mal klein angefangen. Außerdem will ich nicht, dass du was falsches lernst, deswegen hier noch etwas produktives.
http://www.mikrocontroller.net/articles/C-Pr%C3%A4prozessor
Da ist es sehr gut erklärt
Lg
[Ex-Moderator] ; [Ubuntu-User] ; [Designer] ; [Coder] ;
running out of bugs`.
___________________________________________
#define TRUE FALSE // Happy debugging suckers
// sometimes I believe gcc ignores all my comments
|
|
10.03.2011 20:04 |
|
Folgende User bedanken sich: |
|
BambiMään
Profi
Beiträge: 402
Gruppe: User
Registriert seit: Nov 2010
Status:
Offline
Danke erhalten: 88
|
RE: [TUT] PSP Hello World in C
Wo gibt es Tutorials für PSP C?
Also mit diesen Modulen?
Oder gibt es irgendwo eine Beschreibung für die Header Dateien?
@stehn
Werde ich vielleicht mal ausprobieren.
Aber die IDE einzurichten kakt mich gerade an...
PSP: Brite
DC: 8D
FW: 6.39 ME/PRO/TN
Danke an TN, HacKmaN, Neur0n, Coldbird & Virtuos Flame!
Dieser Beitrag wurde zuletzt bearbeitet: 10.03.2011 20:20 von BambiMään.
|
|
10.03.2011 20:20 |
|
|
|
_Kai_
be linux
Beiträge: 2.680
Gruppe: Programmierung
Registriert seit: Nov 2009
Status:
Abwesend
Danke erhalten: 2809
|
RE: [TUT] PSP Hello World in C
Wo gibt es Tutorials für PSP C?
Also mit diesen Modulen?
Oder gibt es irgendwo eine Beschreibung für die Header Dateien?
http://psp.jim.sh/pspsdk-doc/
Hier haste ne Doku.
PSVita mit 16gb Memorystick und PlayStation+
+ Uncharted + Army Corps of Hell + Assassins Creed
+ NFS Most Wanted + COD Black Ops + Resistance
+ Everybodys Golf + Modnation Racers
Für PSN ID => PN
|
|
10.03.2011 20:30 |
|
Folgende User bedanken sich: |
|
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: [TUT] PSP Hello World in C
Wo gibt es Tutorials für PSP C?
Also mit diesen Modulen?
Oder gibt es irgendwo eine Beschreibung für die Header Dateien?
http://psp.jim.sh/pspsdk-doc/
Hier haste ne Doku.
Das ist auch Normalerweise beim PSP SDK dabei
Dieser Beitrag wurde zuletzt bearbeitet: 10.03.2011 20:33 von dark-awesome.
|
|
10.03.2011 20:32 |
|
|
|
gruschi
Legende
Beiträge: 1.301
Gruppe: User
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 447
|
RE: [TUT] PSP Hello World in C
was bewirkt das "\n" hinter der ausgabe hello world?
|
|
16.08.2011 17:12 |
|
|
|
_Kai_
be linux
Beiträge: 2.680
Gruppe: Programmierung
Registriert seit: Nov 2009
Status:
Abwesend
Danke erhalten: 2809
|
RE: [TUT] PSP Hello World in C
was bewirkt das "\n" hinter der ausgabe hello world?
Zeilenumbruch
PSVita mit 16gb Memorystick und PlayStation+
+ Uncharted + Army Corps of Hell + Assassins Creed
+ NFS Most Wanted + COD Black Ops + Resistance
+ Everybodys Golf + Modnation Racers
Für PSN ID => PN
|
|
16.08.2011 17:25 |
|
|
|