**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 31/03/2016 13:10 | #
D'accord merci
Citer : Posté le 13/04/2017 19:39 | #
Bonjour tout le monde !
Je suis nouveau ici et je ne connais pas très bien le fonctionnement du SDK c'est donc pour ça que je sollicite votre aide : Je voudrais faire un calendrier en avec la lib RTC. Le problème est que je ne sais pas ou placer la lib une fois téléchargée. Quelqu'un a t-il la gentillesse de me répondre ?
Merci ;-)
Citer : Posté le 13/04/2017 20:03 | #
Tu récupères le . c et le .h, que tu ajoutes dans le dossier de ton addin.
Il ne faut pas oublier d'inclure ces fichiers au SDK (à gauche) et aussi dans ton .c principal ( #include "blablabla" )
Citer : Posté le 14/04/2017 10:02 | #
Ce qui signifie d'ailleurs qu'il n'y a pas de libs en fait (puisque tu dois tout recompiler à chaque fois) ! Si tu as déjà programmé avant d'atterrir ici, tu verras que ce SDK est un outil assez peu perfectionné tant au niveau de sa gestion de projet que de son compilateur/linker.
En revanche leur émulateur est génial, ça il faut bien l'admettre.
Citer : Posté le 20/04/2017 00:48 | #
Bonjour, je suis un petit nouveau sur le site qui s'intéresse depuis peu à la programmation d'add-in sur Casio. J'ai les connaissances de base en C (merci Openclassroom ) mais j'ai du mal à comprendre le fonctionnement de la lib du sdk. Enfin, surtout une fonction : GetKey(). Je ne comprends pas son fonctionnement : attend-elle l'appuis d'une touche pour permettre au programme de continuer ou est-elle une fonction comme n'importe quelle autre qui ne stop pas le programme ?
Je rencontre un petit problème dans mon premier programme (un Morpion pour faire original ) et je soupçonne cette fonction d'en être la cause. Si la fonction GetKey() stop le programme, y en a-t-il une similaire sans cette action néfaste ?
Merci d'avance pour votre aide Bonne soirée
Citer : Posté le 20/04/2017 00:49 | #
As-tu lu le manuel ? (sur cette page, sélectionnes "Manuels_sdk_fx9860_g75_85_95.zip")
Mon blog ⋅ Mes autres projets
Citer : Posté le 20/04/2017 01:01 | #
Cakeisalie5, je me suis offert ce luxe ... Qui ne m'a pas éclairée sur le fonctionnement de GetKey plus que ça ...:
"The GetKey function performs a key wait and returns a value indicating the pressed key."
Si j'ai bien compris, et j'en ai peur, "la fonction GetKey() attends une action sur l'une des touche de la calc puis renvois dans l'argument la valeur de la touche pressée" (oui c'est une traduction assez libre )
Mais existe-t-il une fonction qui réalise la même action sans pour autant attendre une action ?
Citer : Posté le 20/04/2017 01:06 | #
La solution populaire est IsKeyDown. Cependant, préfères GetKeyWait si tu veux juste attendre quelques temps (évites GetKey+Sleep, Sleep est mal conçu) : en effet, sinon, le processeur exécute toujours des instructions, et tu dépenseras plus rapidement la batterie.
(au passage, n'hésites pas à te présenter dans le topic de présentations, tu pourras ainsi accéder à notre chat où tu pourras poser tes questions plus directement (bien qu'il n'y aie pas grand monde à cette heure) )
Mon blog ⋅ Mes autres projets
Citer : Posté le 20/04/2017 01:12 | #
Mais avec IsKeyDown le problème est le même pour moi ... Enfin le problème vient surement du programme aussi dans son ensemble je vais reprendre tout ça ... La remarque sur la batterie est un "petit" détail que je n'avais pas pris en compte ...
Je prends note je vais aller y faire un tour
Merci pour ton aide, bonne soirée
Citer : Posté le 20/04/2017 01:13 | #
N'hésites pas à faire un topic dédié à ton problème dans la journée du coup. Bonne soirée à toi aussi !
Mon blog ⋅ Mes autres projets
Citer : Posté le 27/04/2017 13:37 | #
Nouveau problème (oui, je débute), malgré le tuto sur la génération de nombre aléatoires avec le SDK, j'ai eu une erreur suite au syscall ou alors ma génération ne marche tout simplement pas ... En conséquent, quelqu'un pourrait-il poster un programme d'exemple de génération d'aléatoire ou m'expliquer une technique simple s'il vous plaît ?
Merci d'avance
Citer : Posté le 27/04/2017 18:46 | #
La méthode proposée par Dark Storm est à peu près la seule manière de faire.
Il serait sans doute plus intéressant pour toi de rechercher une solution à ce problème de syscall. As-tu regardé les commentaires du tutoriel ? De nombreuses personnes ont eu un tel problème avant toi et je ne serais pas surpris qu'une de leurs solutions te convienne également.
Citer : Posté le 21/01/2018 23:08 | #
bonsoir,
totalement une question de débutant ; comment utiliser la fonction GetKeyWait ? et généralement on l'utilise pour faire quoi?
pour tout x>-2
Citer : Posté le 22/01/2018 10:51 | #
Tu ne peux pas utiliser la fonction GetKeyWait() telle quelle... elle est buggée (!). Enfin, ça se contourne. Si tu en as besoin, je peux te donner le code.
La fonction GetKeyWait() sert à faire des entrées clavier qui attendent, mais pas à l'infini. Concrètement, tu as trois modes de fonctionnement :
- Le mode GetKey() qui attend aussi longtemps qu'il le faut ;
- Le mode IsKeyDown() / IsKeyUp() qui s'arrête tout de suite lorsqu'aucune touche n'est pressée, mais qui détecte toutes les touches à la fois (avec IsKey*(), il faut préciser la touche qu'on veut observer) ;
- Le mode GetKey() avec timeout qui s'arrête en renvoyant une valeur spéciale si aucune touche n'est pressée au bout d'un certain délai (en secondes, de mémoire).
Comme à mon habitude, je vais déconseiller fortement d'utiliser le second mode... le troisième pourrait être génial si on pouvait mettre des délais précis, mais il ne nous autorise que les secondes, ce qui est contraignant.
En fin de compte la combinaison GetKey() avec timer (pour laquelle j'ai écrit un tutoriel) est plus intéressante que GetKeyWait().
Citer : Posté le 22/01/2018 21:16 | #
Merci beaucoup
pour tout x>-2
Citer : Posté le 01/05/2018 15:08 | #
Arffff je bloque sur un truc en C++ !!
Je veux avoir comme argument d'une fonction, une chaine de caractères optionnelle.
j'ai le proto suivant
Et
{
unsigned char str_value[10];
sprintf((char*)str_value, "%i", value);
locate(3,3);
Print(txt);
locate(10,4);
Print(str_value);
Bdisp_PutDisp_DD();
}
Est-ce correct ?
Comment dois-je faire pour avoir ce comportement ?
fonction(55, "test")
Ajouté le 01/05/2018 à 15:11 :
C'est bon j'ai trouvé...
Citer : Posté le 01/05/2018 15:14 | #
Btw le proto suivant devrait marcher également.
J'ai surtout changé le [10] en *. Mais pense au const devant les chaînes de caractères, c'est très important, surtout en C++ !
Invité
Citer : Posté le 07/05/2019 20:41 | #
Bonjour à tous,
Maintenant, j'ai une question qui contient "Basic" et C ...
Alors j'ai pensé pourquoi ne pas le mettre ici?
Mon problème est que je veux essayer d'activer le "Backlight" avec C.Basic.
J'ai essayé d'utiliser la fonction "Backlight", en le changeant en 1, mais ça ne s'allume pas et lorsque j'ai essayé d'imprimer si le rétroéclairage était allumé ou éteint (indiqué par un 0 ou un 1), il indiquait 1.
Voici une capture d'écran du code. Quelqu'un pourrait-il expliquer comment cela fonctionne exactement?
Merci d'avance!
(Ps euh, j'ai utilisé Google Translate)
Citer : Posté le 07/05/2019 21:15 | #
C'est pas bien compliqué, le backlight est contrôlé par un pin qui est relié à l'un des ports de communication. La variable adrs est initialisée avec l'adresse du port et la variable bit avec le bit associé (8 pins par port).
Je suis à peu près sûr que la fonction marche, parce que j'ai quelque chose de très similaire (et fonctionnel) dans les sources de gint.
void t6k11_backlight(int setting)
{
volatile uint8_t *port;
uint8_t mask;
/* This setting is mapped to an I/O port:
- On SH3, bit 7 of port G
- On SH4, bit 4 of port N */
if(isSH3())
{
port = (void *)0xa400012c;
mask = 0x80;
}
else
{
port = (void *)0xa4050138;
mask = 0x10;
}
if(!setting) *port &= ~mask;
if(setting > 0) *port |= mask;
if(setting < 0) *port ^= mask;
}
Peux-tu nous éclairer sur le modèle de calculatrice que tu utilises ?
Invité
Citer : Posté le 07/05/2019 21:24 | #
J'utilise le “Casio graph 35 + E” et il est déjà overclocké pour fonctionner avec des “add-ins”
Citer : Posté le 07/05/2019 21:27 | #
C'est curieux. Je n'ai jamais pu tester gint sur une Graph 35+E donc je n'ai pas de certitude, mais je sais que la gestion du backlight avec la fonction que j'ai citée marche sous overclock.
Pour l'instant je ne saurai donc pas dire d'où peut venir le problème.