|
Verfasser |
Nachricht |
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: [TuT] Hello World in C
So wenn du mir jetzt noch sagst wo die hin muss dann gerne ich mache das ja mit PSPDEV und da gibt es so viele Ordner.
Habs geschaft.
Hier nochmal ein Code mit noch ein Paar erklärungen:
//Hello World
/* Dies sind die einzellnen includes ohne die würde garn nichts gehen */ #include <pspkernel.h> #include <pspdebug.h> #include <pspcallbacks.h>
#define printf pspDebugScreenPrintf
PSP_MODULE_INFO("Hello World",0,1,1);
/* int main() { sagt den Compiler da hier das Haupt Programm beginnt */ int main() { pspDebugScreenInit(); pspDebugScreenClear(); SetupCallbacks(); /* Dies ist der Text der Ausgegeben wird und ( \n ) steht dabei für New Line also neu Zeile */ pspDebugScreenPrintf("Hello World\n"); sceKernelSleepThread(); /* return 0; steht dafür das der Code abgeschlossen wird und } steht für hier ist das Ende des Hauptprogrammes */ return 0; }
Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2010 01:05 von dark-awesome.
|
|
07.12.2010 00:25 |
|
|
|
Unbekannt
Holiday News-Writer
Beiträge: 1.600
Gruppe: User
Registriert seit: Mar 2010
Status:
Offline
Danke erhalten: 4404
|
RE: [TuT] Hello World in C
return 0; steht nicht für das Ende des Hauptprogramm, es steht primiär dafür, das der Code abgeschloßen wird.
int main() ist sowas wie eine Einleitung des Codes.
Ab Sofort werden alle unnötigen PNs nicht mehr beantwortet. Ich bin wieder mal weg von PSPKing und unterstütze eine andere Seite da ich hier nicht mehr erwünscht bin. Danke an PSP-Hilfe und den Moderatoren und all die anderen User die nicht so viel Dummeszeug labern.
|
|
07.12.2010 01:01 |
|
Folgende User bedanken sich: |
|
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: [TuT] Hello World in C
return 0; steht nicht für das Ende des Hauptprogramm, es steht primiär dafür, das der Code abgeschloßen wird.
int main() ist sowas wie eine Einleitung des Codes.
Ja das meine ich (ich geb zu das es verwirren kann ich werde es um ändern)
PS: und int main() sagt dem Compiler das hier das Hauptprogramm beginn hab ich erst letztens in einen Buch gelesen.
|
|
07.12.2010 01:04 |
|
Folgende User bedanken sich: |
|
Unbekannt
Holiday News-Writer
Beiträge: 1.600
Gruppe: User
Registriert seit: Mar 2010
Status:
Offline
Danke erhalten: 4404
|
RE: [TuT] Hello World in C
main() ist damit gemeint, dass es sich um das Hauptprogramm handelt "main.c".
Wie ich gesagt habe int main() ist eine Einleitung.
Ab Sofort werden alle unnötigen PNs nicht mehr beantwortet. Ich bin wieder mal weg von PSPKing und unterstütze eine andere Seite da ich hier nicht mehr erwünscht bin. Danke an PSP-Hilfe und den Moderatoren und all die anderen User die nicht so viel Dummeszeug labern.
|
|
07.12.2010 01:18 |
|
|
|
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: [TuT] Hello World in C
So kann man das auch sagen aber im Endeffekt ist es das gleiche.
|
|
07.12.2010 01:21 |
|
Folgende User bedanken sich: |
|
knopper
Halbprofi
Beiträge: 135
Gruppe: User
Registriert seit: Apr 2010
Status:
Offline
Danke erhalten: 58
|
RE: [TuT] Hello World in C
Gibt's eigentlich auch Umlaute für die Ausgabe mit 'printTextScreen' im Graphic-Modus???
PSP 3004, FW 6.6
|
|
07.12.2010 11:03 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: [TuT] Hello World in C
return 0; steht nicht für das Ende des Hauptprogramm, es steht primiär dafür, das der Code abgeschloßen wird.
int main() ist sowas wie eine Einleitung des Codes.
Return 0; steht nicht für Abgeschlossenen Code. Es bedeutet nur dass der Compiler hier diverse Werte wieder vom Stack in die Register zurückschreibt, den Rückgabewert in $v0 schreibt und auf die Rücksprungaddresse springt:
; die Register wieder zurücksetzten
; z.B. lw $bla, 0xDEADBEEF($sp)
li $v0, 0 ; $v0 = Rückgabewert
; Zurückspringen, wegen dem Branch-Delay-Slot wird die Instruction
; danach auch noch ausgeführt
jr $ra
addiu $sp, $sp, blaaa ; stack wiederherstellen, wird wegen delay slot ausgeführt
Es wird nur wieder die 2. Instruction nach dem Sprung auf die Funktion wieder aufgerufen.
Also z.B.
blaaa:
jr $ra ; zurückspringen
li $v0, 0 ; $v0 = 0
module_start:
subu $sp, $sp, 4 ; platz für einen Integer im Stack schaffen
sw $ra, 0($sp) ; Rücksprungaddresse auf dem Stack sichern
li $v0, 1 ; $v0 = 1
jal blaaa ; PC + 8 nach $ra schreiben und springen
nop ; no operation, wegen load delay slot
lw $ra, 0($sp) ; Rücksprungadresse wieder zurücksetzten
jr $ra ; Zur Firmware zurückkehren
addiu $sp, $sp, 4 ; delay slot, stack wiederherstellen
Die Main ist auf der PSP eigentlich NICHT der Beginn des Hauptprogramms. Der Programmcode auf der PSP startet bei module_start, und wenn das Modul gestoppt wird, wird module_stop ausgeführt. Dass PSPSDK erledigt es allerdings alles für dich, da steht dann im Code etwas der Art
/* Auf adresse 0xblaaaaaa, deshalb sub_blaaaaaa */
int main(int argc, char *argv[])
{
// dein Code
};
In Assembler:
sub_blaaaaaa:
; dein Code
int module_start(int args, void *argp)
{
int thid = sceKernelCreateThread("main_thread", 0xblaaaaaa, Priority, Stacksize, 0, NULL);
if(thid >= 0)
sceKernelStartThread(thid, args, argp);
return 0;
};
in Assembler:
module_start:
subu $sp, $sp, 12 ; Platz für $ra, $a0 und $a1 im Stack schaffen
sw $ra, 0($sp) ; $ra sichern
sw $a0, 4($sp) ; $a0 sichern
sw $a1, 8($sp) ; $a1 sichern
li $a0, 0xdeadbeef ; Die Addresse vom namen-string in $a0 laden
li $a1, 0xblaaaaaa ; Adresse der main
li $a2, Priority ; logisch
jal sceKernelCreateThread
li $a3, Stacksize ; delay slot, wird vor jal ausgeführt
bltz $v0, loc_blaaa ; Prüfen ob $v0 kleiner als 0 ist
move $a0, $v0 ; $a0 = $v0
lw $a1, 4($sp) ; $a1 = der alte wert von $a0
lw $a2, 8($sp) ; $a2 = der alte wert von $a1
nop ; load delay slot
jal sceKernelStartThread
nop ; branch delay slot
loc_blaaa:
; Register zurückschreiben
lw $a0, 4($sp)
lw $a1, 8($sp)
lw $ra, 0($sp)
li $v0, 0 ; v0 = 0
jr $ra ; zur firmware zurückspringen
addiu $sp, $sp, 12 ; delay slot, stack wiederherstellen
Ich hoff jetzt ist es etwas besser verstanden :/
Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2010 15:01 von HacKmaN.
|
|
07.12.2010 14:22 |
|
Folgende User bedanken sich: |
|
Dr. Soup
Durchstarter
Beiträge: 58
Gruppe: User
Registriert seit: Mar 2010
Status:
Offline
Danke erhalten: 70
|
RE: [TuT] Hello World in C
Wenn ein Module gestoppt wird wird module_stop ausgeführt falls exportiert. Und bei einem jal (Jump and Link) gilt $ra = PC + 8 (zweite Instruction nach dem jal, da sich PC + 4 im Delay Slot befindet).
PS: Sorry für die kleine "Besserwisser-Attacke" :D
|
|
07.12.2010 14:57 |
|
Folgende User bedanken sich: |
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: [TuT] Hello World in C
Wenn ein Module gestoppt wird wird module_stop ausgeführt falls exportiert. Und bei einem jal (Jump and Link) gilt $ra = PC + 8 (zweite Instruction nach dem jal, da sich PC + 4 im Delay Slot befindet).
PS: Sorry für die kleine "Besserwisser-Attacke"
Danke für die Verbesserungen
Ich bessers mal aus
|
|
07.12.2010 15:00 |
|
|
|
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: [TuT] Hello World in C
Du scheinst dich ja gut aus zu kennen.
Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2010 15:03 von dark-awesome.
|
|
07.12.2010 15:03 |
|
|
|
Fixie
Hungrig und Stur
Beiträge: 3.740
Gruppe: Banned
Registriert seit: Feb 2009
Status:
Offline
Danke erhalten: 1558
|
RE: [TuT] Hello World in C
Wo gib's ein Tutorial ohne Fehler?
Kann HTK nicht trauen...
|
|
07.12.2010 15:04 |
|
|
|
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: [TuT] Hello World in C
Der Code von mir und die der anderen stimmen ja aber die Erklärung war wohl nicht so richtig.
Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2010 15:47 von dark-awesome.
|
|
07.12.2010 15:45 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: [TuT] Hello World in C
Wo gib's ein Tutorial ohne Fehler?
Kann HTK nicht trauen...
Lern C lieber erst fürn PC, am besten ist C von A bis Z.
|
|
07.12.2010 15:47 |
|
|
|
Unbekannt
Holiday News-Writer
Beiträge: 1.600
Gruppe: User
Registriert seit: Mar 2010
Status:
Offline
Danke erhalten: 4404
|
RE: [TuT] Hello World in C
Danke Hackman. Habs etwas falsch erklärt, aber müsste Funktionieren.
Ab Sofort werden alle unnötigen PNs nicht mehr beantwortet. Ich bin wieder mal weg von PSPKing und unterstütze eine andere Seite da ich hier nicht mehr erwünscht bin. Danke an PSP-Hilfe und den Moderatoren und all die anderen User die nicht so viel Dummeszeug labern.
|
|
07.12.2010 15:58 |
|
|
|
_Kai_
be linux
Beiträge: 2.680
Gruppe: Programmierung
Registriert seit: Nov 2009
Status:
Abwesend
Danke erhalten: 2809
|
RE: [TuT] Hello World in C
Hast du es getestet? Müsste theoretisch klappen.
Das mit Callbacks habe ich glaube falsch. Muss nochmal nach schauen.
Warum postest du ein Tutorial dass du nicht mal getestet hast / dir sicher bist dass es auch richtig ist ? Du willst doch den Anfängern helfen und sie nicht verwirren oder ?
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
|
|
07.12.2010 18:26 |
|
Folgende User bedanken sich: |
|
|