benja32

[tuto C]envie D'apprendre à Programmer En C

Messages recommandés

Cours n°1: Compiler avec Cygwin et Visual Studio c++

Bonjour à tous :D

Tout d'abord je tiens a remercier playeradvance.org et bien entendu Yodajr pour sa merveilleuse installation qui sans elle ce tuto n'aurait pas vu le jour.;)

Bon, commençons par le début :

Télécharger l'installation qui est en deux parties,

Partie 1

Partie 2

Une fois téléchargé faites clique droit sur une des parties et extraire ici.

Maintenant, lancez le programme d'installation, vous devriez tomber sur ceci :

01.jpg

Cliquez sur suivant comme pour tous les programmes d'installation, ensuite vous devriez tomber sur ça :

02.jpg

D'origine l'installation est sur le lecteur C, dans un dossier nommé Cygwin. Je vous conseille fortement de le laisser comme ça à part si votre lecteur est à la lettre D, mais je parlais du dossier Cygwin a la racine du disque dur :P. Cliquez sur suivant

Maintenant l'installation devrait commencer, mais ne vous inquiétez pas ça ne durera pas longtemps, 10 minutes au grand maximum.

03.jpg

Bon une fois installé, un fichier bloc note va s'ouvrir avec une explication. Je vais la réexpliquer pour être sur (je vous gâte hein :P)

enfaite il y a une deuxième fenêtre bloc note qui s'est ouverte, celle-ci devra subir ou non une modification selon votre ordinateur.

04.jpg

La deuxième ligne tout a la fin, la lettre K est la lettre du lecteur amovible quand vous brancher votre psp sur votre ordinateur! Moi par exemple la lettre est F donc j'ai modifié la lettre K par un F. Une fois la modification faite fermez sans oublier d'enregistrer.

Et là un troisième document s'ouvre tout seul

05.jpg

Quelques modifications son à apporté encore une fois, changer la lettre K si besoin est et renommez le 'xxx' par le nom que votre homebrew portera puis fermez en enregistrant le tout.

Si vous avez remarqué il y a une fenêtre ms-dos surtout ne la fermer pas tant que des données ne sont pas apparues comme ceci

06.jpg

Revenons maintenant au programme d'installation qui n'est pas fermé, normalement une case "Installer visual studio c++" devrai être cochée si c'est pas le cas cochez la, enfin cliquez sur terminer.

07.jpg

Votre navigateur internet devrai ce lancer et arriver sur la page de téléchargement de visual studio c++, cliquez sur download et télécharger le programme d'installation.

08.jpg

Maintenant décompresser l'archive et lancez l'installation, vous devriez tomber sur un écran semblable à celui-ci

09.jpg

Cliquez sur next et laissez tout par défaut, l'installation n'est pas compliquée, vous verrez. Je rappelle que ce programme est totalement gratuit, mais une fois la licence de 30 jours terminée vous devrez vous inscrire sur le site de Microsoft pour avoir une clé de licence qui est, comme je l'ai dit, gratuite.

Bon, maintenant rendez-vous dans le dossier Cygwin puis lancez cygwin.bat. Ensuite nous avons deux ligne de code a taper mais rien de compliquer

d'abord " mkpasswd -l > /etc/passwd " puis appuyer sur entrer et ensuite " mkgroup -l > /etc/group " et appuyer encore une fois sur entrer.

Vous devriez obtenir quelque chose de semblable a l'image ci-dessous sauf bien sûr le pseudo qui change :

10.jpg

Félicitation votre environnement de développaient est enfin près :D

Maiantenant lancez visual c++, et créer un nouveau projet :

11.jpg

Séléctionnez general a gauche et Makefile project a droite. Comme nom de projet vous pouvez l'appeler comme vous voulez, moi je l'avais appelé décrypter_xtreamlua, car je m'étais amusé a modifié le décrypter du firmware 3.0 :P Enfin faite " OK "

12.jpg

Vous devriez tomber sur une nouvelle fenêtre, compléter là comme l'image ci-dessous puis appuyer sur finish :

13.jpg

Ensuite rendez-vous dans mes documents>Visual Studio 2005>Projects>votre projet>votre projet, et mettez les sources de votre programme dedans ainsi que le fichier copy2psp.bat qui se trouve dans le dossier Cygwin

14.jpg

Pour que le main.c et le Makefile soient visibles sur l'IDE, fait comme sur l'image ci-dessous :

15.jpg

Ensuite prenez le main.c, le Makefile ne sera pas visible pour corriger cela en bas de la fenêtre sélectionneur all files.

16.jpg

Maintenant cliquez sur main.c pour voir le code dans la fenêtre de droite sur visual studio c++.

17.jpg

Passons ensuite a la compilation notre but premier :P pour cela vous n'avez qu'une chose a faire, laquelle me direz-vous ? et bien appuyer sur F7 !

une série de code défilera en bas de l'écran. si la compilation a réussi vous devriez avoir quelque chose comme ça:

002.jpg

Parfois il est marqué failled alors que la compilation a réussis, je ne sais pas pourquoi, regarder l'image ci-dessous la compilation a marché alors que le TEXT me dit le contraire

001.jpg

Dans le dossier de votre projet, plusieurs fichiers ont été créer, le plus important est l'eboot.pbp qui est le résultat de votre compilation, bien sûr vous pouvez brancher votre psp a votre PC avant d'appuyer sur F7 et il sera automatiquement mis dans le dossier game de votre psp.

18.jpg

Voilà j'espère que ce tutoriel vous aura bien aidé, si vous avez des questions n'hésiter pas a les posters sur le forum dans la section approprier

Sur ce joyeux Noël et bonne fête de fin d'année a tous :D

Cours n°2: Hello Wolrd, Afficher du text à l'écran.

Bien, après avoir lu le cours n°1 vous avez un environnement de développement qui fonctionne et où vous créerez vos programmes. Quoi ensuite? Bien, c'est la partie que vous attendiez avec impatience, votre premier

programme pour la PSP. Ce tuto va expliquer les bases du langage de programmation C et construire les fondations sur lesquels vous allez construire votre roya--- euh programmes ^^'.

Nous allons créer une hiérarchie de dossier pour organiser nos projets. Ouvrez un bash shell CYGWIN et tapez « mkdir projects » puis pressez entrer. Cette commande(« mkdir ») signifie « make directory »(créer dossier) et va créer un dossier dans le dossier d'opération actuel(dossier ou se trouve CYGWIN). Donc nous avons maintenant un nouveau dossier pour tous nos projet, naviguez à l'intérieur en tapant « cd projects » et pressez entrer. Maintenant nous allons créer un autre dossier pour ce projet spécifique. Tapez « mkdir helloworld » en pressez entrer. Rendez vous maintenant dans ce dossier en tapant « cd helloworld ».

Le prochain pas est d'ouvrir un éditeur de texte. C'est pas important quel programme c'est, ça peut être le Bloc-notes, Wordpad, tout ce que vous voulez. Personnellement je préfère utiliser un éditezr dédier à l'édition de sources C/C++ à cause de la coloriation de la syntaxe qui sont intégrés, mais honnêtement, ça ne change absolument rien (du moment que vous savez vous en servir).

Maintenant créez un nouveau fichier et nommez le « main.c » dans notre dossier « helloworld ». Ce fichier va contenir le code source de notre programme. Pour ceux d'entre vous qui ne savent pas ce qu'est le code source(et je sais qu'il y en aura beaucoup), le code source est ce que nous écrivons pour créer un programme. C'est écrit de manière à ce qu'un humain puisse le comprendre. Dans la pluspart des langages de programmation, la source doit être convertie en un format compréhensible par l'ordinateur(dans notre cas, la PSP). Ce sont des langages appelés des langages compilés et le C et le C++ tombent dans cette catégorie(la conversion est faite par un compilateur que nous avons initialisé dans la lesson 1). Il y a d'autres langages dit interpétés qui sont lus par des interpréteur qui renvoit le résultat de l'exécution du code. Un exemple de langage interpété est le LUA.

Bon, nous avons donc un nouveau fichier qui va contenir notre code source. Maintenant nous devons commencer de le rédiger. La première partie du programme devrait contenir des commentaires pour dire à toute personne qui lit notre code par la suite quel est le but du programme, quand il a été écrit et qui est l'auteur. Les commentaires sont des lignes de code qui sont omises(ignorés) lors de la compilation (ou sautés par l'interpréteur dans les langages interprétés). Les commentaires sont une partie très importante de votre code parce que quand vous(ou quelqu'un d'autre) revenez sur votre code source plus tard vous ne vous souviendrez pas de tous les détails du programme. Donc vous pouvez vous laisser des notes personnelles sous forme de commentaires. Les commentaire sont représentés par des « // » et « /* ... */ ». Chaque fois que vous verrez « // » ça signifie que toute la ligne est en commentaire. Chaque fois que vous verrez « /* » cela signifie que le commentaire s'étend jusqu'au prochain « */ » et que tout ce qui se trouve entre ces deux balises sera ignoré par le compilateur ou l'interpréteur. Les commentaires signalés par « /* » peuvent englober plusieurs lignes mais les commentaires signalés par « // » n'englobent que le reste de cette ligne.

Bon, commençons notre programme, nous commençons par laisser un commentaire en haut du document pour dire ce qu'il fait, quand il a été créer et qui l'a fait par :

// Hello World – Mon premier programme pour la PSP/* Ce programme a été créé par (Votre nom ici) le (la date ici)C'est une simple application Hello World*/

La prochaine portion de code est la partie ou on dit au compilateur quel fichier d'entête et que fichier d'inclusion nous allons utiliser dans notre programme. Ce que la directive « #include » fait est tout simplement copier du code depuis le fichier que vous avez spécifier. Ceci vous permet de garder votre programme simple, tout en utilisant du code avancé qui est déjà écrit pour vous. La directive d'inclusion peut inclure des fichiers fournis par l'environnement de développement ou des fichiers que vous avez créer vous même en rapport avec le projet. La manière dont vous déclarez quel fichier sera inclus est avec des « <> » pour spécifier le nom du fichier ou vous pouvez aussi utiliser des guillemets double. Les « <> » incluent un fichier du dossier « include » du compilateur et les guillemets double incluent des fichiers qui se trouvent dans le même dossier que le fichier qui les inclu. Nous allons inclure deux fichiers dans notre programme. Le premier est « pspkernel.h ». C'est le fichier qui sera inclus dans chaque programme que vous écrirez pour la PSP. Si vous n'incluez pas ce fichier votre programme ne tournera pas. Le second fichier que nous allons inclure est « pspdebug.h ». Ce fichier contient un grand nombre de fonctions utils pour le débuggage de vos programmes, mais il contient surtout les fonctions que nous allons utiliser pour afficher du texte à l'écran. Donc ajoutons ce code à votre programme :

include.jpg

Maintenant nous allons nous allons dire un peu à la PSP ce que va faire le programme. C'est pas vraiment important vu que le compilateur va l'ignorer mais c'est toujours une bonne idée de garder le but du programme quelque part dans le code source(même si c'est juste pour une compatibilité future). Le premier attribut est le nom du programme mais c'est pas réellement le nom du programme qui apparaitra(nous changerons ça plus tard). Les autres valeurs sont d'autres attributs qui apparaitront (laissez tomber ça pour le moment), il s'agit de la version majeur et de la version miineure. Nous allons donc laisser de côter à part les pour les valeurs par défaut. Alors ajoutez cette ligne à votre programme :

PSP_MODULE_INFO(''Hello World'', 0, 1, 1);

Maintenant nous allons déclarer la fonction qui va nous permettre d'écrir à l'écran. Ce pas est optionnel mais il rend la programmation de programmes en mode texte beaucoup plus facil. La base derrière cette ligne est de modifier la fonction qui est incluse dans la PSP, appelée « pspDebugScreenPrintf » en une syntaxe plus facile à écrir. Cette fonction est utilisée pour écrire à l'écran(que vous verrez plus tard). Ce que nous allons faire c'est renommer « pspDebugScreenPrintf » en « printf ». Comme ça chaque fois que vous écrirez « printf » le compilateur va le traiter comme si vous aviez écrit « pspDebugScreenPrintf ». Et voici comment nous allons procéder : on va définir « printf » en tant que « pspDebugScreenPrintf » comme ceci :

#define printf pspDebugScreenPrintf

Voilà. J'ai maintenant une bonne et une mauvaise nouvelle. La mauvaise nouvelle est que le prochain bloque de code est assez compliqué. La bonne nouvelle est que vous n'avez pas à le comprendre. Voici une brève explication de ce que ça fait( nous allons laisser la syntaxe ci-présente et l'explication ligne par ligne pour plus tard). Ce que ce bloque de code contient est une fonction qui sera appelée dans notre programme. Cette fonction va préparer votre programme afin qu'il puisse tourner sur la PSP et vous permettre de ne pas vous inquiété pour les éventuels freeze et l'arrêt du programme quand vous ne le voulez pas. Ajoutez ce bloque à votre programme :

/* 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;}

Ensuite nous allons définir la fonction principale(« main »). Chaque programmes et C et C++ a besoin de la fonction principale main. C'est depuis là que le code est exécuté. Le code C et C++ est compilé par la dans une suite logique dans la fonction main (paradigme). Il y a donc une suite linéaire. Par exemple, si vous avec ce code(à ne pas ajotuer dans le code) :

int myFunction() {//affiche'A'return 0;}int main() {//affiche 'B'myFunction();//P affiche 'C'return 0;}

Supposons que les commentaires font ce qu'ils racontes, cela signifierais que d'abord il serait afficher B, ensuite A et ensuite C parce que le compilateur commence à la fonction principale(main). Il affiche donc B, ensuite il voit qu'il doit appeler la fonction « myFunction » définie plus haut qui va afficher A, continue ensuite au point ou il se trouvait avant et affiche C. Tous nos programmes (jusqu'à ce que nous atteignons le C++ avancé) vont suivre cette structure linéaire. Donc la fonction « main » est vitale à l'exécution de notre programme. Pour définir une fonction, vous utilisez la structure suivante : « [type de donnée en retour] [nom de la fonction]([arguments]) {[.code] } ». Le type de donnée en retour que la fonction va retourner(renvoyer) au programme. Pour « main » cela devrait toujours être « int » (pour integer, entier). Le nom de la fonction principal(main) mais biensur être « main ». Donc définissez votre fonction principale en ajoutant ceci à votre code :

int main() {

Maintenant nous devons ajouter deux lignes pour préparer l'écran et pour pouvoir utiliser ces deux fonctions que nous avons ajouter auparavant(dont vous ne deviez pas connaître le fonctionnement). Même si vous ne devez pas connaître le fonctionnement de ces fonctions, c'est important de comprendre le concepte de comment appeler des fonctions. C'est effectivement très simple. Vous ajoutez juste le nom avec les parenthèse à la fin( et si la fonction prend des paramètre vous les mettez dans ces parenthèses, mais nous allons nous occuper de ça plus tard). Chaque ligne de votre programme va avoir besoin d'un « ; » à la fin. La raison pour laquelle nous devons mettre des « ; » est que le compilateur ne reconnaît pas les espaces. Entre deux lignes vous pouvez avoir 100 lignes vides et le compilateur ne s'en préoccuperait pas. C'est très pratique parce que ça vous permet de formater votre code afin d'avoir une meilleur lisibilité pour vous. Vous pouvez grouper des lignes ou les espacer comme vous voulez, mais pour finir une ligne vous avez besoin d'un « ; ». Donc ajoutez ces deux lignes dans le programme pour le préparer :

pspDebugScreenInit();SetupCallbacks();

Maintenant écrivons du code dont nous pourront voir des résultats. Vous rappelez vous quand nous avons définis « pspDebugScreenPrintf » en tant que « printf »? Bien, maintenant il est tant de s'en servir. La manière dont nous allons afficher du texte à l'écran est en appelant « printf » avec un paramètre (je vous avais dit que nous verrions ça plus loin). Un paramètre est une variable que vous pouvez passer à la fonction pour qu'elle s'en serve. Ceci viendra facilement plus tard quand vous écrirez vos propres fonctions. Bon, pour que « printf » affiche du texte nous devons lui passer une chaine de caractère. « printf » est une fonction puissante parce que nous pouvons aussi l'utiliser pour afficher des variables à l'écran. Nous les passerions dans d'autres paramètre, mais tout viendra en temps voulu.Maintenant nous allons juste écrire « Hello World » à l'écran, comme ça :

printf(''Hello World'');

Et voilà, noud avons dit à « printf » d'écrir à l'écran. Maintenant nous devons finir encore nous occuper de quelques détails et notre code source sera près à la construction. Nous devons mettre le prorgamme en pause pour que nous puissions voir l'affichage. Si nous ne le fesions pas le programme se bloquerais juste ou retournerais au menu PSP. Et vous ne pourriez jamais voir cette belle phrase à l'écran parce qu'elle serait effacée si vite. Ajoutez donc cette ligne pour que le programme s'arrête jusqu'à ce que le bouton « Home » soit pressé et que l'utilisateur soit renvoyé à l'OS de la PSP :

sceKernelSleepThread();

Maintenant nous devons donner à notre fonction une valeur de retour, comme quand nous l'avons définie (« int main() »), nous disions au compilateur que la valeur de retour sera un entier. Donc retournons juste un 0 (c'est bien un zéro et non un o majuscule) en ajoutant ça :

return 0;

Et finalement, finissez la fonction en ajoutant une accolade de fermeture :

}

Et voilà, c'est tout pour le programme! Maintenant nous devons juste dire au compilateur comment nous voulons que le projet soit compilé en créant un Makefile. Créez donc un nouveau fichier appelé « Makefile » sans extension (par ex : pas de .txt). Une fois que c'est fait ouvrez le fichier avec votre editeur de texte.

Ajoutez ça à votre Makefile :

TARGET = helloOBJS = main.oCFLAGS = -O2 -G0 -WallCXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rttiASFLAGS = $(CFLAGS)EXTRA_TARGETS = EBOOT.PBPPSP_EBOOT_TITLE = Hello WorldPSPSDK=$(shell psp-config --pspsdk-path)include $(PSPSDK)/lib/build.mak

Vous pouvez utiliser ce Makefile comme base pour vos projets simples. Parfois vous devez ajouter des librairies ou je ne sais quoi à ce fichier, mais pour le moment c'est vraiment simple. Principalement ce fichier dit au compilateur de prendre « main.c » et le construire avec PSPDSK dans un fichier .pbp que votre PSP peut lire. Ce que vous devrez changer si vous utilisez ce Makefile pour d'autres projets c'est ou ça dit « PSP_EBOOT_TITLE=Hello World ». Vous pouvez changer le « Hello World » et mettre le nom de votre programme, c'est le nom qui va apparaître à l'écran de la PSP quand vous sélectionnez le fichier.

Maintenant ouvrez un bash shell CYGWIN et « cd » dans votre dossier de projet « projects/helloworld ». Tapez « make » et le shell devrait vous retourner quelques infos. Il va vous dire si votre code source contient des erreurs qui le rendrait incompatible. Généralement il vous donne bon nombre d'avertissements mais ce n'est pas très important. Ce sont les erreurs auxquels vous devriez vous intéresser, les avertissements sont juste des points ou il y aurait potentiellement des bugs. Note : si vous avez la version du Firmware 1.50, vous pouvez automatiquement générer vos deux dossiers en tapant « make kxploit » à la place de « make ».

Si vous n'avez aucune erreur, félicitations! Vous avez créé avec succès votre première application pour PSP! Je parie que vous êtes avide de l'essayer. Alors mettez « C:/cygwin/home/VotreNomd'utilisateur/projects/helloworld/EBOOT.PBP » sur votre PSP comme vous le feriez avec n'importe quel autre Homebrew et essayer le!

Télécharger le code source ici

Voilà c'est ici que s'achève la première partie :P d'autre viendrons s'ajouter par la suite, n'hésité pas à poser des questions si vous en avez ;)

a++

benja32

Modifié par benja32

Partager ce message


Lien vers message
Partager sur d'autres sites

wouh... excellent tuto merci benja! ;)

a+ et bon code!

Partager ce message


Lien vers message
Partager sur d'autres sites

Excellent tuto. Merci benja32 :ok:

Juste je souhaiterais débuter. Tu me conseille le C, C++ ou le LUA ?

Et enfin une question idiote : pourquoi t'as pas pris comme langue ; français ?

Sinon pour installer Visual Studio Express j'ai pas les mêmes fenêtres que toi.

Modifié par cedrinho

Partager ce message


Lien vers message
Partager sur d'autres sites
Excellent tuto. Merci benja32 :ok:

Juste je souhaiterais débuter. Tu me conseille le C, C++ ou le LUA ?

Salut,

Il est bien de commencer avec Lua, car tu connaiteras déja la base quand tu arriveras en C/C++

A++

Partager ce message


Lien vers message
Partager sur d'autres sites
Maintenant ouvrez un bash shell CYGWIN et « cd » dans votre dossier de projet « projects/helloworld ». Tapez « make » et le shell devrait vous retourner quelques infos.

"ouvrez un bash shell cygwin et un "cd" "

C'est quoi ces deux trucs ? On les ouvre comment ? avec Visual C++ ? icon9.gif

Partager ce message


Lien vers message
Partager sur d'autres sites
"ouvrez un bash shell cygwin et un "cd" "

C'est quoi ces deux trucs ? On les ouvre comment ? avec Visual C++ ? icon9.gif

Je sais ça date mais non ça n'a pas de rapport avec Visual C++.

cd est une commande des shell unix-like pour changer de répertoire.

Partager ce message


Lien vers message
Partager sur d'autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant