Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » fxSDK, un SDK alternatif pour écrire des add-ins
LephenixnoirEn ligneAdministrateurPoints: 15511 Défis: 136 Message

fxSDK, un SDK alternatif pour écrire des add-ins

Posté le 29/08/2014 22:00

Le fxSDK est une alternative au SDK habituel de Casio. Il permet de développer des add-ins pour la famille de la Graph 35+E et la Graph 90+E, et offre de meilleures performances et plus de possibilités !

Les outils du fxSDK

Le fxSDK marche sous Linux et a été compilé pour Mac OS ; il ne marche pas encore pour Windows mais on peut en discuter.

Il se fonde sur l'indispensable compilateur gcc et sa suite d'outils : as, ld, objdump, objcopy (entre autres). Contrairement au vieux compilateur du SDK, gcc est un compilateur moderne avec beaucoup de possibilités. Il n'est pas fourni avec le fxSDK et fait l'objet d'un tutoriel d'installation à part.

Côté calculatrice, c'est le noyau gint qui fait le travail. Il remplace fxlib et une partie de l'OS pour vous offrir des fonctionnalités plus cool et plus rapides. Les add-ins développés avec le fxSDK utilisent gint toutes les trois lignes !

Le fxSDK fournit également des outils spécifiques pour compiler et étudier les programmes de la calculatrice.

fxsdk est un petit gestionnaire de projet qui vous permet de créer et compiler facilement des projets sans vous prendre la tête avec le Makefile. Parfait si vous ne voulez pas connaître toutes les détails compliqués.

fxg1a sert à créer les fichiers g1a finaux à partir du programme compilé. C'est le successeur de mon vieux g1a-wrapper qui était beaucoup moins puissant.

fxconv convertit des données pour vos add-ins, commes vos images ou polices, dans des formats spécifiques de gint. C'est un peu comme le Sprite Coder mais ça vous évite de copier des gros tableaux dans votre programme et surtout le dessin est beaucoup plus performant !

fxos est un désassembleur et manipulateur d'OS capable de retrouver et disséquer des syscalls en un tour de poignet. C'est un outil de reverse-engineering dont l'usage principal est de produire des listings assembleur annotés pour comprendre très rapidement le code.

Il y a pas mal de différences avec le SDK de Casio donc passer au fxSDK nécessite un peu d'adaptation.

Installer le fxSDK sur votre ordinateur

Ça se passe en trois étapes :

1. Compiler un compilateur gcc à destination de la calculatrice
2. Installer le fxSDK
3. Installer le noyau, gint

Je suppose ici que vous connaissez les bases de la ligne de commande, mais si ce n'est pas le cas, n'hésitez pas à laisser un commentaire pour demander.

La première chose est de vous préparer un cross-compilateur gcc. Vous pouvez sauter l'installation du g1a-wrapper et venir ici dès que la libgcc est installée. Assurez-vous que le compilateur est dans le PATH est vous serez prêt ! C'est le plus gros morceau donc une fois que vous aurez ça, vous aurez déjà pratiquement fini.

Clônez le dépôt git du fxSDK depuis la forge de Planète Casio (vous pouvez aussi utiliser SSH).

% git clone 'https://gitea.planet-casio.com/Lephenixnoir/fxsdk.git'

Configurez le fxSDK ; vous pouvez taper "./configure --help" voir les options disponibles. Par défaut, le fxSDK sera installé dans votre dossier personnel (dans ".local").

% cd fxsdk
% ./configure

Ensuite compilez et installez ! Si vous avez choisi un dossier d'installation différent avec --prefix ou si vous compilez sous Mac, vous pourriez avoir besoin de sudo à l'installation.

% make
% make install

Assurez-vous que votre dossier de destination est dans votre PATH, puis vous pouvez installer gint.

Vous êtes alors prêt à partir !

Développer des programmes avec le fxSDK

TODO: Ajouter l'utilisation de fxsdk.

Toute la partie programmation revient à développer des programmes avec gint. Les tutoriels d'utilisation de gint couvrent tous ce dont vous aurez besoin, y compris l'utilisation de fxconv.


Fichier joint


Pages : Précédente1 ... , 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ... 21Suivante
IntelligideHors ligneMembre de CreativeCalcPoints: 46 Défis: 5 Message

Citer : Posté le 09/07/2015 16:36 | #


Lephenixnoir a écrit :
Au fait Intelligide, tu la gères comment ta coloration syntaxique toi ?


Ben avec un fichier XML pour le style et les couleurs et une QList contenant les regex
LephenixnoirEn ligneAdministrateurPoints: 15511 Défis: 136 Message

Citer : Posté le 09/07/2015 16:38 | #


Intelligide a écrit :
Ben avec un fichier XML pour le style et les couleurs et une QList contenant les regex

Explique-moi ce que ça a d'évident.

Parce que le XML tu le parses comment ? Il y a un module pour ça intégré à Qt il me semble...
Et ça veut dire qu'à chaque fois que tu trouves un match pour une regex tu es obligé de lire le fichier pour trouver le format correspondant !?
IntelligideHors ligneMembre de CreativeCalcPoints: 46 Défis: 5 Message

Citer : Posté le 09/07/2015 16:42 | #


En fait, j'utilise un QMap<QString, QString>

Lephenixnoir a écrit :
Parce que le XML tu le parses comment ? Il y a un module pour ça intégré à Qt il me semble...
Et ça veut dire qu'à chaque fois que tu trouves un match pour une regex tu es obligé de lire le fichier pour trouver le format correspondant !?


En fait, c'est un fichier comme ça:
<?xml version='1.0' encoding='UTF-8'?>
<style-scheme>
    <style foreground="#000000" background="#ffffff" name="Text"/>
    <style foreground="#ffffff" background="#3399ff" name="Selection"/>
    <style foreground="#a0a0a0" background="#f0f0f0" name="Line number"/>
    <style name="Current Line"/>
    <style foreground="#000000" name="Function"/>
    <style foreground="#000080" name="Number"/>
    <style foreground="#808000" name="Keyword"/>
    <style foreground="#008000" name="String"/>
    <style foreground="#000080" name="Preprocessor"/>
    <style foreground="#008000" name="Comment"/>
    <style foreground="#000000" name="Operator"/>
    <style foreground="#008000" name="Multiline Comment"/>
</style-scheme>


Pour parser, j'utilise QtXML qui est très simple le principe est que je parse chaque <style> puis je cherche le regex dont l'index dans le QMap est name puis j'applique avec une classe hérité de QSyntaxHighlighter
LephenixnoirEn ligneAdministrateurPoints: 15511 Défis: 136 Message

Citer : Posté le 09/07/2015 16:47 | #


Intelligide a écrit :
En fait, j'utilise un QMap<QString, QString>

Donc tu as bien les deux en RAM. Ok, ça me paraissait plus logique aussi.

Intelligide a écrit :
Pour parser, j'utilise QtXML qui est très simple

Moi j'ai trois (deux) regex, c'est simple aussi

Intelligide a écrit :
le principe est que je parse chaque <style> puis je cherche le regex dont l'index dans le QMap est name puis j'applique avec une classe hérité de QSyntaxHighlighter

Je suppose que tu as repris l'exemple de la doc de Qt ?
Et comment gères-tu le commentaire multi-ligne ? La méthode highlightBlock() de QSyntaxHighlighter ne colore qu'un bloc (qui est en réalité une ligne) donc une regex simple ne peut pas discerner une ligne entre /* et */ d'une autre ligne.
IntelligideHors ligneMembre de CreativeCalcPoints: 46 Défis: 5 Message

Citer : Posté le 09/07/2015 16:51 | #


pour le commentaire multiligne, je sais plus mais je pense que j'ai laissé l'exemple de Qt en attendant de trouver quelques pistes pour colorer un texte sans html (je pense avoir trouver avec cet exemple)
LephenixnoirEn ligneAdministrateurPoints: 15511 Défis: 136 Message

Citer : Posté le 09/07/2015 16:58 | #


Oh, je ne connaissais pas cet exemple, merci du lien.

Est-ce que tu pourrais faire un test pour moi ? Écrire une chaîne de caractères constante (entre double quotes) sur plusieurs lignes dans ton éditeur et me dire si elle colorée.

Au fait, je me rends compte que j'ai oublié quelque chose : un second niveau de coloration pour les règles qui ne s'appliquent qu'au sein de règles multi-lignes. Pour deux exemples flagrants, on peut prendre les caractères échappés dans les chaînes de caractères ou les formats de type javadoc dans les commentaires en /**.

Puisque mes règles multi-lignes ont des noms, je dois pouvoir implémenter ça « facilement ». Si j'y arrive ça va commencer à avoir de la gueule !
IntelligideHors ligneMembre de CreativeCalcPoints: 46 Défis: 5 Message

Citer : Posté le 09/07/2015 17:01 | #


Lephenixnoir a écrit :
Oh, je ne connaissais pas cet exemple, merci du lien.

Est-ce que tu pourrais faire un test pour moi ? Écrire une chaîne de caractères constante (entre double quotes) sur plusieurs lignes dans ton éditeur et me dire si elle colorée.


Dans le fxsdk ou le winsdk?
LephenixnoirEn ligneAdministrateurPoints: 15511 Défis: 136 Message

Citer : Posté le 09/07/2015 17:19 | #


Oh, dans le WinSDK. ton éditeur »)
Dark stormEn ligneMembre d'honneurPoints: 10824 Défis: 176 Message

Citer : Posté le 09/07/2015 17:31 | #


Au passage Lephe, y'avais un bug dans ton algo l'autre jour : dans "Hello World 123 du texte", il colorie en numéraire les chiffres.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirEn ligneAdministrateurPoints: 15511 Défis: 136 Message

Citer : Posté le 09/07/2015 17:33 | #


Ben, c'était juste une histoire d'ordre... comme il colorait les constantes numériques après le texte, tu avais ce résultat dérangeant...

Maintenant, c'est réglé.
Dark stormEn ligneMembre d'honneurPoints: 10824 Défis: 176 Message

Citer : Posté le 09/07/2015 17:33 | #


Ah, j'ai eu peur
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirEn ligneAdministrateurPoints: 15511 Défis: 136 Message

Citer : Posté le 09/07/2015 19:19 | #


J'ai mis à jour le screen, vous pouvez y voir la coloration syntaxique « récursive » avec le @return dans le commentaire du main() !
IntelligideHors ligneMembre de CreativeCalcPoints: 46 Défis: 5 Message

Citer : Posté le 10/07/2015 13:35 | #


Après avoir tester, je suis un peu déçu

1) C'est juste une fenêtre graphique avec un bon design
2) Il n'y a pas d'options, donc on peut pas régler le compilo ni le wrapper
3) On peut pas créer de polices

En fait, pour l'instant, les seuls trucs sont la compilation et la coloration syntaxique

Ensuite, au niveau du code, je pense que je vais prendre ton parser de stylesheet ( avec le respect de la license, bien sur)

Enfin,
La police a-t-elle une taille correcte ? Je trouve qu'elle est petite et que du 12px c'est mieux
L'aspect de la fenêtre correspond-il aux captures du topic ? Yep
Double-cliquez sur 'main.c', à gauche. La coloration syntaxique est-elle correcte ? Yep

Compilez le projet (Ctrl + B). Si possible, incluez le log
make: entrant dans le répertoire « /home/yoann/Téléchargements/fxSDK-b/tmp »
sh3eb-elf-gcc -c /home/yoann/Téléchargements/fxSDK-b/tmp/main.c -o build/main.c.o -m3 -mb -O9 -Wall -Iinclude -Llib -L/home/yoann/Téléchargements/fxSDK-b/tmp
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c: In function 'main':
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:50:17: warning: implicit declaration of function 'cos' [-Wimplicit-function-declaration]
   p[i].x = 24 * cos(angle) + 64;
                 ^
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:50:17: warning: incompatible implicit declaration of built-in function 'cos'
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:50:17: note: include '<math.h>' or provide a declaration of 'cos'
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:51:17: warning: implicit declaration of function 'sin' [-Wimplicit-function-declaration]
   p[i].y = 24 * sin(angle) + 32;
                 ^
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:51:17: warning: incompatible implicit declaration of built-in function 'sin'
/home/yoann/Téléchargements/fxSDK-b/tmp/main.c:51:17: note: include '<math.h>' or provide a declaration of 'sin'
sh3eb-elf-as -c /home/yoann/Téléchargements/fxSDK-b/tmp/crt0.s -o build/crt0.s.o
sh3eb-elf-gcc build/main.c.o build/crt0.s.o -o "build/tmp.elf" -T addin.ld -nostdlib -Llib -L/home/yoann/Téléchargements/fxSDK-b/tmp -lfx
/usr/programs/sh3eb-elf-gcc/lib/gcc/sh3eb-elf/5.1.0/../../../
sh3eb-elf-objcopy -R .comment -R .bss -O binary "build/tmp.elf" "build/tmp.bin"
../sh3eb-elf/bin/ld: warning: section `.bss' type changed to PROGBITS
g1a-wrapper "build/tmp.bin" -o "tmp.g1a" -i icon.bmp
-- g1awrapper : 2008 Andreas Bertheussen, 2011 Leo Grange.
[>] Reading icon file 'icon.bmp'.
offset : 130
header size : 108
[W] Unreconized BMP file. Icon will be BLANK.
[I] File 'build/tmp.bin' selected as binary source.
[I] File 'tmp.g1a' selected for G1A file.
[I] Timestamp: 2015.0710.1129
[I] G1A size:  1032
[>] Writing header.. OK.
[>] Writing data.. OK.

Output size is 1032 bytes.
make: quittant le répertoire « /home/yoann/Téléchargements/fxSDK-b/tmp »


Ajoutez des fichiers au projet temporaire en choisissant Project > Add Files.
Ensuite, retirez-les un par un via le menu contexuel, en cliquant droit sur
leurs entrées dans le panneau de projet. (J'ai eu des crashs sur cette action.)

J'ai pas eu de crash

Cliquez sur le bouton 'Debug information'. Y a-t-il bien trois chemins valides dans la fenêtre du terminal ? Il ne se passe rien

Via le menu 'Settings', changez le nom du projet et sauvegardez-le dans un dossier vide. Si possible, incluez le fichier .pro créé dans le dossier. Fermez et relancez le fxSDK, choisissez Project > Open et sélectionnez le dossier précédemment utilisé. Le projet doit se charger sans problème. Aucun problème

Ajouté le 10/07/2015 à 13:36 :
et on peut pas fermer les fichiers
LephenixnoirEn ligneAdministrateurPoints: 15511 Défis: 136 Message

Citer : Posté le 10/07/2015 13:46 | #


Intelligide a écrit :
Après avoir tester, je suis un peu déçu

1) C'est juste une fenêtre graphique avec un bon design
2) Il n'y a pas d'options, donc on peut pas régler le compilo ni le wrapper
3) On peut pas créer de polices

Comme je l'ai dit, ce n'est qu'une version de toute base, le « noyau dur » pour éditer et compiler du code. Les options de paramétrage du compilateur et du wrapper seront assez faciles à mettre en place, je m'en occuperai « assez » rapidement. Quant aux polices, l'éditeur existe déjà, je n'ai qu'à l'intégrer pour pouvoir éditer directement.

Intelligide a écrit :
En fait, pour l'instant, les seuls trucs sont la compilation et la coloration syntaxique

C'est exact ! Les seuls éléments vraiment nécessaires pour écrire des programmes, tu remarqueras.
N'oublie pas que je ne cherche pas le fonctionnalité de l'IDE mais du programme final...

Intelligide a écrit :
Ensuite, au niveau du code, je pense que je vais prendre ton parser de stylesheet ( avec le respect de la license, bien sur)

Erf, s'il y a bien un truc que j'aurais aimé éviter, c'est bien celui-là.
Pas que ça me dérange -bien au contraire- mais ce parser est moche : je pourrai utiliser des regex, et si tu testes rapidement, tu verras qu'on ne peut pas mettre deux thèmes dans le même fichier (ça ne fonctionne pas) : ensuite ça manque drastiquement de fonctions (du style @highlight = lighten(@text, 20)), mêmes basiques, et le concept du « langage » est pas fini de travailler.
Bon, tu peux l'utiliser hein (en terme de license contente-toi de dire que le code est de moi si tu le veux, ça ira), mais je ne te le conseille pas, du moins pas pour l'instant.

Intelligide a écrit :
La police a-t-elle une taille correcte ? Je trouve qu'elle est petite et que du 12px c'est mieux
L'aspect de la fenêtre correspond-il aux captures du topic ? Yep
Double-cliquez sur 'main.c', à gauche. La coloration syntaxique est-elle correcte ? Yep

Excellent.

Le log est super, désolé pour le wrapper, comme je l'ai dit à Nemhardy c'est en fait le mien, que j'ai oublié de vous passer.

Intelligide a écrit :
Ajoutez des fichiers au projet temporaire en choisissant Project > Add Files.
Ensuite, retirez-les un par un via le menu contexuel, en cliquant droit sur
leurs entrées dans le panneau de projet. (J'ai eu des crashs sur cette action.)

J'ai pas eu de crash

Win \o/

Intelligide a écrit :
Cliquez sur le bouton 'Debug information'. Y a-t-il bien trois chemins valides dans la fenêtre du terminal ? Il ne se passe rien

Est-ce que tu as retiré toutes les ressources, y compris les trois de base ? Si tu as le temps, essaye avec un projet neuf, juste en ouvrant le SDK.

Intelligide a écrit :
Via le menu 'Settings', changez le nom du projet et sauvegardez-le dans un dossier vide. Si possible, incluez le fichier .pro créé dans le dossier. Fermez et relancez le fxSDK, choisissez Project > Open et sélectionnez le dossier précédemment utilisé. Le projet doit se charger sans problème. Aucun problème

Super !

Intelligide a écrit :
et on peut pas fermer les fichiers

Hmm, si. Comme dans tous les systèmes d'onglets, Ctrl + W.
Nan, sérieusement, t'as pas essayé ça ?
IntelligideHors ligneMembre de CreativeCalcPoints: 46 Défis: 5 Message

Citer : Posté le 10/07/2015 13:53 | #


Hmm, si. Comme dans tous les systèmes d'onglets, Ctrl + W.
Nan, sérieusement, t'as pas essayé ça ?


Nan je suis pas trop raccouris j'aime faire trainer les choses et une petite croix, c'est pas la fin du monde( juste la fin d'un prophète )
LephenixnoirEn ligneAdministrateurPoints: 15511 Défis: 136 Message

Citer : Posté le 10/07/2015 13:54 | #


Ok, je plaide coupable. J'ai oublié de mettre la croix. x)
IntelligideHors ligneMembre de CreativeCalcPoints: 46 Défis: 5 Message

Citer : Posté le 10/07/2015 13:56 | #


croix le ou pas, c'est mieux avec
Dark stormEn ligneMembre d'honneurPoints: 10824 Défis: 176 Message

Citer : Posté le 10/07/2015 14:00 | #


Un ordi, visuellement, c'est un clavier plus un écran. Le reste c'est superflu

Il a pas tord quand même, une petite croix c'est bien

Au passage, pour le wrapper, Kris en avait pas fait un perso lui aussi ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
IntelligideHors ligneMembre de CreativeCalcPoints: 46 Défis: 5 Message

Citer : Posté le 10/07/2015 14:02 | #


Dark storm a écrit :
Un ordi, visuellement, c'est un clavier plus un écran. Le reste c'est superflu


Tu joues à des FPS avec seulement ton clavier ?
Dark stormEn ligneMembre d'honneurPoints: 10824 Défis: 176 Message

Citer : Posté le 10/07/2015 14:02 | #


Oui (le pire, c'est que c'est vrai).
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
LephenixnoirEn ligneAdministrateurPoints: 15511 Défis: 136 Message

Citer : Posté le 10/07/2015 14:03 | #


Ben, le wrapper qu'Intelligide a utilisé c'est celui de Kris. Mais il est assez incomplet, pour dire vrai...
Pages : Précédente1 ... , 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ... 21Suivante

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2019 | Il y a 68 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd