**Le SDK pour fx-9860/Graph85** Topic officiel
Posté le 18/07/2007 15:08
Vu la multitude de topics sur le SDK de la 85, j'ai décidé d'en faire un seul et unique, où l'on posera nos problèmes et explications sur ce même topic, et non pas sur 50, par souci de clareté et de facilité.
Des nouveautés ? Des problèmes ? Des idées ?
Exposez les ici !
Voici une liste de commandes commencées par Muelsaco. N'hésitez pas à rajouter vos commandes dans le topic je les rajouterai pour en faire profiter tout le monde. Merci.
// Locate X,Y,"Texte"
:arrow: locate(x,y); Print("Texte");
// Text X,Y,"Texte"
:arrow: PrintMini(x,y,"Texte",0);
// F-Line x1,y1,x2,y2
:arrow: Bdisp_DrawLineVRAM(x1,y1,x2,y2);
// Tracer une ligne blanche
:arrow: Bdisp_ClearLineVRAM(x1,y1,x2,y2);
// PxlOn x,y & PxlOff x,y
:arrow: Bdisp_SetPoint_VRAM(x,y,<couleur>)
<couleur> : 0 pour le blanc, 1 pour le noir
// Cls
:arrow: Bdisp_AllClr_DDVRAM();
// Actualiser l'écran
:arrow: Bdisp_PutDisp_DD();
Fonction très importante. Elle permet d'afficher une image tracée virtuellement dans la VRAM. Toute image doit d'abord être dessinée dans la VRAM puis affichée à l'écran. Vous ne verrez donc pas votre image s'afficher tant que vous n'aurez pas appelé Bdisp_PutDisp_DD(). À noter que les fonctions GetKey() et Print() l'appellent automatiquement.
While <exp1>
<code>
WhileEnd
:arrow:
while(<exp1>)
{
<code>
}
// StoPict x
:arrow: SaveDisp(x);
x variant de 1 à 3 uniquement.
// RclPict x
:arrow: RestoreDisp(x);
x variant de 1 à 3 uniquement.
// Ouvrir un popup (comme les erreurs syntaxe, etc)
:arrow: PopUpWin(<taille>);
<taille> : de 1 à 8.
Rappels sur les variables globales : Source
* Les variables globales sont à utiliser avec précaution, puisqu'elles créent des liens invisibles entre les fonctions. La modularité d'un programme peut en souffrir et le programmeur risque de perdre la vue d'ensemble.
* Il faut faire attention à ne pas cacher involontairement des variables globales par des variables locales du même nom.
* Le codex de la programmation défensive nous conseille d'écrire nos programmes aussi 'localement' que possible.
L'utilisation de variables globales est jusitifiée, si
* Plusieurs fonctions qui ne s'appellent pas ont besoin des mêmes variables, ou
* Plusieurs fonctions d'un programme ont besoin du même ensemble de variables. Ce serait alors trop encombrant de passer toutes les variables comme paramètres d'une fonction à l'autre.
Citer : Posté le 17/05/2014 22:11 | #
Je l'ai mis en commentaire, j'ai essayé avec (int* jeu), et si j'essaye avec (int jeu[][]) ça me donne : "Missing array size"
Regardez mon lecteur de vidéo !
Citer : Posté le 17/05/2014 22:11 | #
ben en fait, il ne connais pas la taille en x de ton tableau, donc il ne peut pas y accéder
Citer : Posté le 17/05/2014 22:14 | #
Effectivement c'était ça, merci
Regardez mon lecteur de vidéo !
Citer : Posté le 17/05/2014 22:23 | #
Non, car si tu écris ça tu ne donnes pas la taille du tableau mais la valeur de la dernière case.
Tu dois mettre "tableau", tout simplement, car en fait je me suis trompé : ce n'est même pas un tableau à une dimension que tu envoies, mais une valeur.
Le prototype de ta fonction devrait être comme ça :
Édit : zut, apparament tu as modifié ton message
Citer : Posté le 17/05/2014 22:29 | #
Je ne vois pas comment le compilateur peut savoir la taille du tableau que j'envoi avec des "char taille_x", comment sait-il à quoi correspond cette variable ? Et puis la taille de mon tableau n'est pas vouée à changer alors il ne devrait pas y avoir de problème.
Regardez mon lecteur de vidéo !
Citer : Posté le 17/05/2014 22:43 | #
Il ne peut pas, c'est à toi d'adapter ta fonction pour qu'elle puisse gérer toutes les tailles possibles avec ces paramètres (si j'ai bien compris ce dont Dark Storm voulait parler)
Citer : Posté le 17/05/2014 22:57 | #
Bonjour,
Quelqu'un a t'il déjà eu le problème que me SDK interprète PrintMini en le mettant en Y,X au lieu de X,Y sur ecran ?
Citer : Posté le 18/05/2014 09:45 | #
Non, c'est possible?
Citer : Posté le 18/05/2014 12:04 | #
Bon, petit cours sur les tableaux en 2D
Lorsque vous déclarez ceci (voir-ci dessous), le compilo alloue une zone de mémoire de 5*8 = 40 octets succincts (je travaille sur des char, mais pour les int c'est pareil en 4 fois plus grand). Le code de la deuxième ligne effectue exactement la même chose.
char monTableau2[40]; //
Toutefois, lorsque vous voulez accéder à une case en particulier, vous pouvez dans le premier cas utiliser les doubles crochets, et dans le deuxième cas faire comme si on avait des lignes :
monTableau2[ligne*8 + colonne] = 0; // *8 car il y a 8 colonnes par lignes
Jusque là, il ne devrait pas y avoir de problèmes
On en arrive à la notion de fonction qui doit avoir comme paramètre un pointeur sur un tableau : si on le passe normalement, le compilateur ne sais pas combien il y a de colonnes dans le tableau, si c'est un pointeur sur un tableau 2D. On est donc obligé de passer "manuellement" les arguments, par exemple pour modifier une valeur dans un tableau (ici on va faire des tables de multiplication :
{
int monTableau[5][8]; // déclaration d'un tableau de 5 lignes et 8 colonnes
initialiser_tableau(monTableau, 5, 8);
}
void initialiserTableau(int* tableau, int lignes, int colonnes)
{
int i, j;
for(i=0; i<lignes; i++)
{
for(j=0; j<colonnes; j++)
{
tableau[ i * colonnes + j ] = i*j; // on accède comme pour un tableau 1D
}
}
}
Sinon, vous pouvez utiliser le memcpy(), si la taille de votre tableau est fixe :
{
int monTableau[5][8]; // déclaration d'un tableau de 5 lignes et 8 colonnes
initialiser_tableau(monTableau);
}
void initialiserTableau(int* tableau)
{
int i, j;
int tableau_tmp[5][8];
for(i=0; i<5; i++)
{
for(j=0; j<8; j++)
{
tableau_tmp[ i ][ j ] = i*j; // on accède comme pour un tableau 2D, le compilo connait sa taille
}
}
memcpy(tableau, tableau_tmp, 8 * 5 * sizeof(int)); // on copie le tableau temporaire dans le tableau passé en argument
}
Une autre solution consiste à déclarer en global le tableau, mais ça peut vite devenir problématique, au niveau du nom des variables et de la vitesse d'execution.
En tout cas, pour plus d'infos, consultez le Site du Zéro
Citer : Posté le 02/06/2014 15:22 | #
Bonjour,
Je dois vous posez une question stupide mais nécessaire :
Comment afficher sur la calculatrice une variable en Printmini() ?
En C on utilise %d mais là ça marche pas
Citer : Posté le 02/06/2014 15:45 | #
Justement si.
Plutôt que d'utiliser printf(), on déclare une chaîne de caractères et on écrit dedans, avec sprintf() :
char ch[20];
int x = 2934;
sprintf(ch,"x = %d",x);
PrintMini(1,1,(cont unsigned char *)ch,0);
Il y a juste un paramètre avant le format, la chaîne dans laquelle on veut écrire.
Citer : Posté le 02/06/2014 21:05 | #
Si j'ai bien compris là tu crées une chaine de caractère, tu initialises un nombre, puis tu donnes à la chaine ch la "valeur" x = %d (qui est x) avant d'écrire le tout ?
Cela donne, si j'ai bien tout compris : "2934 = 2934"
J'essaye et si ça marche merci beaucoup
Citer : Posté le 02/06/2014 21:49 | #
Non, on aura "x = 2934". En fait, le '%' indique qu'il y a quelque chose à remplacer et le 'd' que c'est un entier. S'il n'y a pas de '%', le texte est écrit tel quel.
Tu peux facilement trouver sur Internet comment ça fonctionne, en cherchant pour printf() (c'est pareil, juste le premier paramètre et le 's' ).
Je voudrais pas te dire "RTFM", mais c'est très long à expliquer.
Citer : Posté le 03/06/2014 06:45 | #
Oui ok, j'avais pas vu sur le coup le premier x n'était pas remplacer
En tout cas merci beaucoup à toi
Citer : Posté le 03/06/2014 22:01 | #
http://pastebin.com/LYUcpX7R
Bonjour,
L'erreur se situe autour de la ligne 902
Pas de problème, j'ai build has successfull, seulement quand je demarre le programme etc, des que j'arrive sur case 0, l'add in s'arrete :/ Je ne sais pas pourquoi, je ne sais pas comment.
Surtout que tant que j'avais pas ce case 0 et que ma variable continent était définit au début, tout marchais parfaitement..
Si vous ne comprenais pas ce que je veux dire .... je comprends parfaitement
Citer : Posté le 03/06/2014 22:09 | #
Il y a un truc qui saute aux yeux bien que surprenant... pourquoi est-ce que tu as toutes ces images vides ?
Ajouté le 03/06/2014 à 22:25 :
C'est bizarre... je ne vois qu'une chose, c'est que le volume de locales que tu as dépasse 8192 octets... essaie de réduire la taille de tes images pour les placer autrement qu'en (0;0). Là, il y a plein de blanc sur les bords
Citer : Posté le 04/06/2014 14:33 | #
as tu mis un breakpoint à cette endroit là?
Citer : Posté le 07/06/2014 21:08 | #
J'ai un gros problème avec le S.D.K., mais dans le genre bizarre...
En fait il n'est plus capable d'effectuer de compilation complète : je clique sur Build, il commence à compiler, et il s'arrête en plein milieu (ou au début, ça dépend...).
Je n'ai donc plus qu'à cliquer sur "Stop Building", auquel cas l'U.C. utilisée grimpe à 100% et l'ordinateur se met à ramer monstrueusement. Et même lorsque je provoque l'extinction du programme, l'U.C. utilisée reste de 100% tant que je n'ai pas fermé ma session
J'ai réinstallé le S.D.K., sans succès...et je ne sais plus quoi faire. Qu'avez-vous à me proposer ?
Citer : Posté le 07/06/2014 21:09 | #
Vérifier que ton disque C ne soit pas saturé.
J'ai eu ce problème pendant très longtemps, un peu de nettoyage et ce fut réglé.
Citer : Posté le 07/06/2014 21:11 | #
J'ai environ 50% d'espace libre sur le disque C:, donc ça ne doit pas être la source du problème.
Citer : Posté le 07/06/2014 21:22 | #
Avec le gestionnaire des tâches, tu verras que la compilation continue lorsque tu fermes le SDK, c'est indépendant.