經過一早上的折騰,我的Hello PSP!終於出現了!
第一次在linux下寫psp代碼,昨天雖然編譯得差不多了,但是要寫還是有點無從下手的感覺。經過一晚的沉澱,今天早上開工寫,當然首先還是去找下教程吧,功夫不負有心人,果然找到一篇很適合像我這樣菜的人。
http://blog.csdn.net/lee576/article/details/2033754
上面這位大哥真是好人,手把手啊!我照着上面的步驟一步步弄到最後。
make
報錯!找找看。
暈,居然是在Makefile中PSPSDK=$(shell psp-config -- pspsdk-path)"--"和"pspsdk-path"之間多了一個空格!
果然C程序不好寫,修復,繼續make
接下來的錯誤就讓我有點……
在經過多次反覆查看後,發現代碼已經跟上面大哥寫得一模一樣了,可是爲什麼不行呢!?
再上網搜,這回讓我發現另一個地址:http://www.linuxgraphics.cn/psp/dev_guide.html。
上面的內容跟第一位大哥寫得差不多,不過還是讓我發現了一點不一樣
第一位大哥代碼是這麼寫的:
SP_MODULE_INFO("Hello World", 0, 1, 1)
新發現的是這麼寫的:
PSP_MODULE_INFO("Hello World", 0, 1, 1);
編譯報錯是指向main.c中SP_MODULE_INFO("Hello World", 0, 1, 1);的行,難道是這個問題,修改爲PSP_MODULE_INFO("Hello World", 0, 1, 1);試一試。
修改後,make
成功了!!
接下來就要把生成的EBOOT.PBP文件拷到我的PSP中看看行不行。興奮的接上PSP把EBOOT.PBP拷進去,然後從PSP中找它,結果……,PSP裏什麼都沒有,怎麼回事!
繼續去找老師,經過無數前輩的點撥,原來要把“皮”一起拷過去。好吧,把之前新建的那個HelloPSP整個拷過去(連源文件的一起了,省事!)。
這回進入PSP,果然在裏面發現一個可執行的東東。果斷執行,熟悉的啓動畫面進入眼前,慢慢的浮現出一個黑底的屏幕,屏幕上赫然顯示白色字體的“Hello PSP!”。成功了!!看着那黑底白字,我的眼睛溼潤了!
哎,雖然以前在linux下寫過點C代碼,但是那是屈指可數,而且都是抄書。今天跟着無數前輩的指點,copy他們的代碼,總算是不求甚解的把hello psp弄出來了。萬事開頭難既然已經成功開了頭,路會越走越順的,接下來我可以好好學習下了!
另:昨天的009-psplinkusb.sh沒有編譯成功,看來國外的兄弟沒有騙我,至少現在看起來,沒有影響我的Hello PSP!
下面貼出我的代碼吧,差不多都是copy前輩的,但是絕對是可以的,我的是PSP 3006 6.20的系統。
main.c
//hello PSP - My First App for the PSP /* This program war created by(super) on (Date Here) It is a simple "Hello World" APplication. */ #include <pspkernel.h> #include <pspdebug.h> PSP_MODULE_INFO("Hello PSP", 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 PSP!"); sceKernelSleepThread(); return 0; }
Makefile
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 PSP PSPSDK=$(shell psp-config --pspsdk-path) include $(PSPSDK)/lib/build.mak