Блоги :: Колонка пользователя Lost_prophet :: Краткий курс С на PSP :часть вторая: Пишем Helloworld программу и немного разбираемся в С.

 
 
 
PSP Club
AllHits.Ru - Прокачай свою PSP на максимум!
Разделы портала


Поиск




Авторские колонки о PSP - Расскажи всем о своих впечатлениях
Колонки / Блоги пользователей PSP-Club.Ru

Краткий курс С на PSP :часть вторая: Пишем Helloworld программу и немного разбираемся в С.

Автор: Lost_prophet | Пишет Инструкции Инструкции | Опубликовано 06.04.2008 17:01

Я так предполагаю вы прочитали часть первую, соорудили окружение для разработки и готовы перейти к написанию программ.
 
Для начала создадим папку для наших проектов. Откройте CYGWIN bash , напишите "mkdir projects" и нажмите энтер. Эта команда ("mkdir") расшифровывается как "создать директорию (папку)" и она создаст папку в том месте в котором мы на данный момент находимся. теперь набираем "cd projects" и "mkdir helloworld". 
 Следующий шаг - редактор С кода. им может быть Блокнот или Wordpad. желательно отыскать тот который умеет подвечивать и исправлять ошибки в синтакисе и функциях, но это неважно.
Теперь создайте файл "main.c" в папке "helloworld". Здесь будет находится исходный код нашей программы. У многих возникнет вопрос как создать файл с таким хитрым расширением, тут можно обойтись блокнотом просто создайте текстовый файл, и выберите "сохранить как" и вместо "новый текстовый документ.txt" наберите "Main.c".
 
Отлично, теперь у нас есть файл в котором мы можем хранить наш исходный код, и неплохо бы его начать писать.
Первой частью нашей программы будут комментарии. Комментарии очень важны, ведь так разобраться в том что делает программа, кто автор и что за что отвечает, будет намного проще.
Комментарии отмечаются  символами "//" and "/*" . "//" означает, что оставшаяся часть строки будет комментарием. A "/*" означает что компилятор проигнорирует все что будет написано до "*/" . комментарии обозначенные "/*" могут включать много строк в отличии от "//".
Так что начнем нашу программу с записи о том что она делает и кто автор )
 
// HelloWorld - моя первая программа
/*          Эта программа была написана Lost_Prophet/ 6.04.2008*/ В следующей части программы мы скажем какие файлы включать . в принципе все что делает "#include" - это копирует код из файла которые мы ей даем. Это позволяет программе быть простой, так как весь серьезный код уже написан за вас. Это включает файлы которые шли с компилятором, или файлы написанные вами.
 Мы подключим 2 файла к нашей программе. Первый -"pspkernel.h." Этот файл мы всегда будем включать в любую программу для PSP. Он содержит весь код необходимый для работы программы на PSP. Второй фал который мы будем использовать - "pspdebug.h." Этот файл содержит функции для отладки программ и функции для использования экрана. Добавьте этот код в вашу программу 
 
#include pspdebug.h; #include pspdebug.h; Затем мы сообщим psp о нашей программе. Это не очень важно, программа и без этого будет работать, но неплохо держать это. Первый атрибут - имя программы (это не то имя которое будет отображается, мы изменим его позже). Оставшиеся значения это указания версии (просто не трогайте их), мажорная и минорная версии. мы просто оставим эти значения по умолчанию. Добавим эту строку в cаму программу:
PSP_MODULE_INFO("Hello World", 0, 1, 1); Теперь мы добавим функцию чтобы писать на экране. Этот шаг не очень важен ,но он в разы облегчает работу всех программ связанных с текстом. Базовая цель изменить название функции для PSP, называемой "pspDebugScreenPrintf" на нечто что удобно печатать (согласитесь что лучше напечатать 5 знаков вместо 15ти ) ) . Эта функция используется для того чтобы выводить текст на экран. Короче мы тупо переименуем "pspDebugScreenPrintf" в "printf." и с этого момента компилятор будет воспринимать "printf" так словно мы напечатали "pspDebugScreenPrintf."
 И вот как мы это сделаем; Мы определим "printf" как "pspDebugScreenPrintf" вот так:
 
#define printf pspDebugScreenPrintf вот мы уже и приблизились к середине процесса.
 
У меня хорошая новость и плохая. Плохая новость - следующий кусок кода будет довольно сложным. Впрочем, вам не надо понимать его (на данный момент). Это хорошая новость. 
 В принципе этот кусок кода содержит функции вызываемые в программе. Они позволят вашей PSP не зависать и не выходить из программы когда это не требуется. Вставьте это в программу:
 
 
/* функция выхода */int exit_callback(int arg1, int arg2, void *common) {          sceKernelExitGame();          return 0;}
/* подпроцесс обратного вызова */int CallbackThread(SceSize args, void *argp) {          int cbid;
          cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);          sceKernelRegisterExitCallback(cbid);
          sceKernelSleepThreadCB();
          return 0;}
/* Настраивает подпроцесс и дает ему 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() {
 каждая строка должна завершатся точкой с запятой. Причина - компилятор не видит пустого места .  Это очень удобно потому что вы можете форматировать код как захотите и как вам удобно. Добавьте эти 2 строке в вашу программу для настройки:
 
pspDebugScreenInit();SetupCallbacks();
 
Теперь можно написать код действие которого мы увидим. помните мы определили "pspDebugScreenPrintf" как "printf?" Пришла пора использовать эту функцию.
Мы используем эту функцию с неким параметром (в нашем случае текстовым).
"Printf" очень мощная функция, потому что параметром может быть не только текст, но и другие значения (мы обсудим это в следующих частях).
. А сейчас мы просто напишем "Hello World":
 printf("Hello World");
 
Вот и почти все.. осталось остановить нашу программу, чтобы мы могли увидеть результат, иначе программа или зависнет или выкинет нас в меню. :
 
sceKernelSleepThread();
 
Эта строка остановит программу до того момента как будет нажата кнопка "Home".
Теперь дадим нашей фунции возвратное значение ("int main()"), Мы уже сообщили компилятору что это будет  целое число. Так что вернем "0"  (это ноль, а не о):
return 0;
И завершим нашу фунцию закрывающей скобкой:
}
вот и все! программа готова.
Однако нам нужно её скомпилировать.
Для этого в той же директории что и "main.c" создаем файл "makefile" (без расширения).
 
и пишем в файл эти строки :
ARGET = helloOBJS = main.o
CFLAGS = -O2 -G0 -WallCXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rttiASFLAGS = $(CFLAGS)
EXTRA_TARGETS = EBOOT.PBPPSP_EBOOT_TITLE = Hello World
PSPSDK=$(shell psp-config --pspsdk-path)include $(PSPSDK)/lib/build.mak
 
тут мы сообщаем компилятору что делать с программой ;)
 
PSP_EBOOT_TITLE = Hello World - название программы
 
теперь откройте CYGWIN Bash перейдите в папку с программой (вы это уже умеете ).
И наберите "make" если у вас прошивка 2.xx - 3.xx или "make kxploit" если у вас прошивка 1.5 .
 
теперь радуемся процессу, находим Eboot.pbp в папке с программой и бежим тестировать.
 Все файлы которые получаются в процессе можно скачать тут
Друзья, я напоминаю, что это всего лишь базы (я еще части 4 напишу) и я не могу все охватить, поэтому советую вам приобрести, или найти на просторах инета большую книжку по С ))..
by Lost_Prophet @ psp-club dot ru
PSP Club Vote Bar Проголосовать противПроголосовать за!
Текущий рейтинг +90 Голосов против 12 Голосов за 102
Для того чтобы добавить комментарий, вам необходимо авторизоваться.
Это не займет много времени, а авторизованные пользователи получают доступ к расширенным возможностям клуба.


 
 
Контакты | Обратная связь | Реклама на сайте | RSS RSS Лента. Сводка последних добавлений игр для PSP
MaxiPack Web Projects © 2021. При копировании материалов ссылка на сайт обязательна.
"PSP" и "Play Station" - зарегистрированные торговые марки корпорации Sony Computer Entertainment.