**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 03/05/2014 11:39 | #
Pour aller vite.
http://hpics.li/4c1b760
http://hpics.li/9e74250
Je pense que tu sauras te débrouiller avec ça, mais si tu as besoin d'un coup de main, demande-moi.
Citer : Posté le 03/05/2014 11:40 | #
J'ai finalement trouvé la doc, je regarde ça, merci
Ajouté le 03/05/2014 à 12:05 :
C'est pas mal ces syscall mais je perds l'interface précédente à moins de tout refaire car je ne peux pas définir le curseur au pixel près
Du coup je suis en train de repenser à l'interface même si je préfère l'ancienne.
Citer : Posté le 03/05/2014 12:22 | # | Fichier joint
Bonjour, je reposte à propos de mon problème (page 57)
Désolé du retard, je profite des vacances
Donc :
Vérifie que ta fonction doit bien retourner un int, sinon c'est qu'il y a un problème dans la déclaration de ta structure. A tu bien mis un ; après sa déclaration?
Oui mes fonction int retourne un int, et mes fonctions void ne retournent rien.
Comme en c j'ai inclue un header dans lequel il y a le prototype des fonctions utilisés.
EDIT : Voici en fichier joint le code du programme sous forme de .txt. Si vous voulez le .h, il suffit de le demander, mais il n'y a pas grand chose dedans.
Citer : Posté le 03/05/2014 12:24 | #
Tu peux remettre ton code s'il te plaît ? On s'y pert avec tous ces messages.
aliegeois Invité
Citer : Posté le 14/05/2014 21:16 | #
Bonjour à tous,
je vous expose mon problème : je veux modifier un tableau dans une fonction et j'ai le code suivant (entre autres):
void genererMinesTerrain(int* jeu)
{
int i, j;
for (i = 1; i <= 10; i++)
{
do // permet de générer 10 nombres compris entre 0 et 127 strictement différents
{
j = floor(128 * rand());
} while (jeu[j] == 10);
jeu[j] = 10;
}
}
int AddIn_main(int isAppli, unsigned short OptionNum)
{
int jeu[128]; // même si j'initialise tout à 0, ça ne change rien
genererMinesTerrain(jeu);
}
Le compilateur ne m'anonce pas d'erreur mais lorsque je teste le programme j'ai un message qui vient du sdk qui me dit :
"Execution has stopped due to an error!
Nonexisting memory by data read access at 88A9F598"
Je vois bien qu'il y a un problème de mémoire mais je ne vois pas d'où il peut venir.
Merci de votre aide.
Regardez mon lecteur de vidéo !
Citer : Posté le 14/05/2014 21:25 | #
D'abord, est-ce que tu as bien inclus math.h pour utiliser floor() ? Enfin, puisque j est un int, la calculatrice tronque automatiquement le flottant, donc tu peux l'enlever.
Après, peut-être que c'est ton jeu qui foire.
Tu as essayé de l'allouer dynamiquement ?
aliegeois Invité
Citer : Posté le 14/05/2014 21:31 | #
Oui j'ai fait toutes les inclusions, et c'est vrai que floor() est inutile merci.
Pour allouer dynamiquement, c'est bien avec malloc() ?
Regardez mon lecteur de vidéo !
Citer : Posté le 14/05/2014 21:33 | #
Ou plus simplement, avec calloc() qui initialise en même temps.
dans ton cas.
aliegeois Invité
Citer : Posté le 14/05/2014 21:35 | #
Daccord, et j'utilise toujours free() pour libérer ?
Regardez mon lecteur de vidéo !
Citer : Posté le 14/05/2014 21:36 | #
La libération est indentique quelle que soit la fonction d'allocation.
Ne jamais oublier de libérer !
aliegeois Invité
Citer : Posté le 14/05/2014 21:42 | #
Je viens d'essayer, voici le code :
void genererMinesTerrain(int* jeu);
void genererMinesTerrain(int* jeu)
{
int i, j;
for (i = 1; i <= 10; i++)
{
do
{
j = 128 * rand();
} while (jeu[j] == 10);
jeu[j] = 10;
}
}
int AddIn_main(int isAppli, unsigned short OptionNum)
{
int* jeu = NULL;
jeu = malloc(128 * sizeof(int));
genererMinesTerrain(jeu);
}
Et ça me donne la même erreur...
Regardez mon lecteur de vidéo !
Citer : Posté le 14/05/2014 21:52 | #
Mais non !
rand est un entier entre +- 2147483647 !
Mets-moi
et tu peux récupérer le code d'origine.
aliegeois Invité
Citer : Posté le 14/05/2014 21:57 | #
MERCI !!
Quel c** j'ai confondu avec une autre fonction qui génère entre 0 et 1...
Ca marche enfin
Encore merci pour la rapidité des réponses je me relirait à 2 fois la prochaine fois avant de poster un message
Regardez mon lecteur de vidéo !
Citer : Posté le 14/05/2014 21:59 | #
Oui, moi aussi j'ai confondu.
D'ailleurs, je ne sais pas comment j'ai fait vu que cette fonction renvoit un int.
Enfin bref, si jamais tu as une autre question, n'hésite pas à nous la poser.
Citer : Posté le 15/05/2014 20:16 | #
Rebonjour (au passage je me suis créé un compte )
J'ai aujourd'hui un problème d'une nature tout à fait différente, je voudrai stocker des données sur la calto, comme une liste de scores, ou la progression d'un joueur. J'ai cherché sur Google mais je n'ai rien trouvé qui pourrai m'aider (à mon niveau du moins). J'ai en effet trouvé quelques bribes d'information, comme le fait que 0xB4010000 correspond à la lecture/écriture de données mais ça ne représente rien pour moi...
Merci de votre aide.
Regardez mon lecteur de vidéo !
Citer : Posté le 15/05/2014 20:23 | #
Utilise les fonctions BFile
Ajouté le 15/05/2014 à 20:24 :
Ou alors Memory (quelque part ici : http://www.planet-casio.com/Fr/logiciels/voir_un_logiciel_casio.php?showid=86 )
Citer : Posté le 15/05/2014 20:43 | #
Merci pour les liens, MonochromeLib m(a en effet l'ai plutôt utilse, néanmoins je ne comprend pas comment me servir de Bfile_OpenFile, un petit exemple m'aiderait beaucoup.
Regardez mon lecteur de vidéo !
Citer : Posté le 15/05/2014 21:00 | #
Je te conseille d'utiliser Memory : http://www.planet-casio.com/Fr/logiciels/voir_un_logiciel_casio.php?logiciel=SDK_G85_-_Memory_and_Files_access_Snippets&showid=113 (j'attendais que tu clique à gauche sur le lien que je t'avais donné )
Dans la documentation fournie avec, tu devrais trouver des exemples
Citer : Posté le 17/05/2014 22:02 | #
Rebonjour,
J'ai encore un problème (décidément ), avec un tableau à 2 dimensions :
void maFonction(int jeu[]); // même avec (int* jeu) ça ne marche pas
void maFonction(int jeu[])
{
int i, x, y;
for (i = 1; i <= 10; i++)
{
do
{
x = rand() % 16;
y = rand() % 8;
} while (jeu[x][y] == 9);
jeu[x][y] = 9;
}
}
int AddIn_main(int isAppli, unsigned short OptionNum)
{
int jeu[18][10] = {{0}};
maFonction(jeu);
return 1;
}
Et j'ai une belle erreur : "Illegal array reference" à la ligne "} while (jeu[x][y] == 9);"
Merci de me dire si je n'ai pas oublié quelque chose avec les pointeurs ou autre
Regardez mon lecteur de vidéo !
Citer : Posté le 17/05/2014 22:08 | #
C'est normal, tu passes en paramètre un tableau à une dimension, et ensuite tu l'utilise comme un tableau bidimensionnel
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 !