Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » fxSDK, un SDK alternatif pour écrire des add-ins
Lephenixnoir Hors ligne Administrateur Points: 24337 Défis: 170 Message

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

Posté le 29/08/2014 22:00

Cette page sert d'index pour la série de topics du fxSDK.

Le fxSDK est une collection d'outils permettant de développer des add-ins pour les calculatrices Casio des séries Graph. C'est une alternative au fx-9860G SDK et PrizmSDK qui ne sont plus activement maintenus, et le compagnon classique de mon noyau gint.

Index des topics

Ce projet existe depuis 2015, alors il y a pas mal de topics liés. En voici une liste complète !

Topics principaux

Installation du fxSDK

Tutoriels

Compatibilité sur calculatrice et PC

Côté PC, le fxSDK est compatible avec Linux, Mac OS, et WSL pour Windows ; normalement tout le monde peut l'utiliser. Je teste constamment sous Linux, et WSL est un Linux donc c'est testé aussi. Je n'ai pas de Mac OS donc il peut y avoir quelques surprises, mais en général c'est l'affaire de corriger un bug ou deux.

En termes de calculatrices, le fxSDK supporte :

Calculatrices monochromes
  • Graph 35+E II
  • Graph 35+ USB / Graph 35+E (SH3/SH4)
  • Graph 75/75+/75+E
  • Graph 85/85 SD/95 (SD) (pas activement testé)

Calculatrices couleurs
  • Graph 90+E / fx-CG 50
  • Prizm fx-CG 10/20

Comment installer le fxSDK et coder des add-ins

Le fxSDK s'installe à partir de dépôts Git sur la forge de Planète Casio (par exemple Lephenixnoir/fxsdk). Il y en a un peu beaucoup, donc manuellement c'est assez long. Pour que ça aille plus vite et pour simplifier le travail des débutants, il y a un outil appelé GiteaPC qui peut faire ça pour vous.

Si vous utilisez Windows, vous aurez besoin de WSL pour accéder à un système Linux dans Windows. Heureusement, Microsoft a fait ça bien et c'est facile à faire. Voyez le tutoriel d'installation de WSL 2 (et l'explication rapide de ce que WSL 2 est).

Si vous utilisez Mac OS, ouvrez l’œil en lisant les topics pour ne pas manquer les informations supplémentaires et éventuelles déviations par rapport à la procédure normale sous Linux.

Méthode automatique avec GiteaPC (plus rapide / recommandée pour les débutants)
  1. Suivez le tutoriel d'utilisation de GiteaPC, qui explique comment obtenir le fxSDK.

Méthode automatique avec plugin VS Code
  1. Yannis300307 a créé un plugin VS Code Casio Dev Tools qui fonctionne sous Windows (avec WSL) et Debian (probablement les dérivés aussi).

Méthode AUR pour les utilisateurs Arch/Manjaro/dérivés (ils se reconnaîtront)
  1. Dark Storm maintient MiddleArch, un dépôt de paquets précompilés qui a entre autres le fxSDK.

Méthode manuelle (plus fine / classique pour les habitués)
  1. Compilez et installez le cross-compilateur GCC pour SuperH.
  2. installez (dans cet ordre) les dépôts fxSDK, OpenLibm, fxlibc, gint ; en option, Slyvtt/µSTL_2.3.

Description sommaire du fxSDK

Pour une introduction à l'utilisation du fxSDK qui montre comment utiliser les outils pour développer un add-in, lisez plutôt les tutoriels d'utilisation de gint. Cette section est juste une description sommaire.

Le cœur du fxSDK est un cross-compilateur GCC pour SuperH, habituellement nommé sh-elf-gcc. Bien sûr on a avec toute la suite d'outils, dont as, ld, objdump, objcopy (entre autres). Contrairement au vieux compilateur du SDK, GCC est un compilateur moderne avec beaucoup d'options et capable de très solides optimisations.

Sur la calculatrice, c'est le noyau gint qui fait la majorité du travail. Il remplace fxlib/libfxcg 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 !

Il y a enfin plusieurs outils utiles sur le PC qui sont utilisés durant le développement ou l'utilisation des add-ins :

  • fxsdk est un script shell qui permet de créer et compiler les projets sans se prendre trop la tête. Le système de compilation officiel pour les add-ins est CMake, mais un système plus ancien de Makefile est encore supporté.
  • fxconv est un outil très polyvalent qui convertit à la compilation les assets (images, polices, maps....). Il permet de travailler avec des logiciels et formats de fichiers normaux sur le PC et d'avoir automatiquement un format optimisé sur la calculatrice. fxconv est extrêmement extensible et chaque projet peut ajouter des conversions personnalisées.
  • fxgxa crée les fichiers g1a (format des add-ins pour Graph monochromes) et g3a (format des add-ins pour Graph couleurs) à partir des programmes compilés.
  • fxlink est un outil de communication qui peut transférer des fichiers vers les Graph 35+E II et Graph 90+E en ligne de commande, mais aussi échanger interactivement avec les add-ins gint par le câble USB, et est couramment utilisé pour réaliser des captures d'écran ou captures vidéo des add-ins.


Changelog et informations techniques

Ci-dessous se trouve la liste des posts annonçant les nouvelles versions du fxSDK, ainsi que des liens vers les instructions/tutoriels supplémentaires publiés avec.

VersionDateInfos supplémentaires
fxSDK 2.11.06 Juillet 2024Debuggage à distanceCompilation mono pour Graph 90
Générer plusieurs variables dans fxconv
fxSDK 2.10.02 Avril 2023Personnalisation de l'icône Graph 90+ETutoriel d'utilisation de libfxlink
fxSDK 2.9.129 Août 2022
fxSDK 2.9.021 Août 2022Réinstallation complète nécessaire
fxSDK 2.8.017 Mai 2022
fxSDK 2.7.119 Mars 2022
fxSDK 2.7.031 Décembre 2021Collecter toutes les images d'un projet avec fxconv
fxSDK 2.6.030 Août 2021Génération de structures complexes avec fxconv
fxSDK 2.5.24 Juillet 2021
fxSDK 2.5.14 Juillet 2021
fxSDK 2.5.025 Mai 2021
fxSDK 2.4.027 Avril 2021
fxSDK 2.3.130 Janvier 2021
fxSDK 2.3.029 Janvier 2021Introduction de fxconv-metadata.txtInstructions de migration vers CMake
Séparation de libprof en fx/cg



Précédente 1, 2, 3 ··· 10 ··· 20 ··· 30 ··· 38, 39, 40, 41
Lephenixnoir Hors ligne Administrateur Points: 24337 Défis: 170 Message

Citer : Posté le 03/02/2024 13:23 | #


Le mode append n'est pas bien supporté mais oui tu peux réécrire dans un fichier sans le supprimer. C'est le cas sur 35+E II et 90+E.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Yannis300307 Hors ligne Membre Points: 284 Défis: 0 Message

Citer : Posté le 03/02/2024 13:32 | #


On peut modifier juste quelques bytes dans le fichier sans avoir à tout réécrire ? Il me semble que j'avais eu des problèmes ou je devais supprimer le fichier avant de le recréée de 0.
WOW ! Mais qu'est-ce-que je vois ??!! Une extension VS Code qui permet de simplifier le développement sur calculatrices ??!! C'est ici : Casio Dev Tools. C'est incroyable ! C'est prodigieux !
Lephenixnoir Hors ligne Administrateur Points: 24337 Défis: 170 Message

Citer : Posté le 03/02/2024 13:50 | #


Sur le vieux fs avant le 35+E II ou la Prizm il fallait. Sur le nouveau fs c'est bon. C'est l'un des quelques bénéfices qu'on récupère en échange de l'atroce lenteur.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dualforce Hors ligne Membre Points: 45 Défis: 0 Message

Citer : Posté le 10/04/2024 18:26 | #


heu j'ai un prit problème je comprends pas pq j'ai cette erreur
:~/CasioTiles$ fxsdk build-cg
CMake Error at CMakeLists.txt:10 (find_package):
  By not providing "FindGint.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Gint", but
  CMake did not find one.

  Could not find a package configuration file provided by "Gint" (requested
  version 2.9) with any of the following names:

    GintConfig.cmake
    gint-config.cmake

  Add the installation prefix of "Gint" to CMAKE_PREFIX_PATH or set
  "Gint_DIR" to a directory containing one of the above files.  If "Gint"
  provides a separate development package or SDK, be sure it has been
  installed.


-- Configuring incomplete, errors occurred!
See also "/home/dualforce/CasioTiles/build-cg/CMakeFiles/CMakeOutput.log".
See also "/home/dualforce/CasioTiles/build-cg/CMakeFiles/CMakeError.log".

Ma calculatrice Graph 90+E
Collège fx92+
Aucun projet en cour faut déjà que j'apprenne a faire des add-in et donc a programmer en C un minimum
Apentissage C
   1%

Lephenixnoir Hors ligne Administrateur Points: 24337 Défis: 170 Message

Citer : Posté le 10/04/2024 18:28 | #


gint n'est pas installé. Comment est-ce que tu as installé le fxSDK ? Si tu as pris la méthode GiteaPC, assure-toi d'avoir été à la fin de la section "Installation du fxSDK avec GiteaPC" de cette page.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dualforce Hors ligne Membre Points: 45 Défis: 0 Message

Citer : Posté le 10/04/2024 18:31 | #


a oui jai oublie giteapc install Lephenixnoir/gint vu que j'ai lu trop vite
Ma calculatrice Graph 90+E
Collège fx92+
Aucun projet en cour faut déjà que j'apprenne a faire des add-in et donc a programmer en C un minimum
Apentissage C
   1%

Lephenixnoir Hors ligne Administrateur Points: 24337 Défis: 170 Message

Citer : Posté le 06/07/2024 10:24 | #


Nouvelle version : fxSDK 2.11.0

Release associée de gint : gint 2.11.0
Release associée de la fxlibc : fxlibc 1.5.1

⚠️ Vous devez réinstaller les libs et recompiler vos add-ins avec -B. Instructions ci-dessous.

C'est la première version sortie depuis plus d'un an, donc il y a plein de petites choses à dire.

Fonctionnalités majeures :
  • Support du debuggage à distance permettant de debugger des add-ins en live avec GDB. Voyez le post sur le topic de gint.
  • Ajout d'une commande fxsdk build-fxg3a qui permet de compiler un add-in mono sous la forme d'un .g3a exécutable sur Prizm/Graph 90+E. Ça marche tant que vous utilisez l'API de gint mais pas les syscalls ou le matériel directement. Voyez le post à ce sujet dans le topic de gint.
  • Double amélioration de performance des programmes avec la LTO et soft-fp, expliqué ci-dessous.

Nouveautés un peu moins majeures :

Et quelques détails :


Améliorations de performance : LTO et soft-fp

Cette version du fxSDK affecte le compilateur, GCC, de deux façons qui amélioreront la performance des add-ins.

D'abord, elle active pour tous les projets et bibliothèques la LTO, ou Link-Time Optimization, qui est une forme d'optimisation qui se fait à la toute dernière étape de compilation. Sans rentrer dans les détails, contrairement aux optimisations classiques qui n'optimisent qu'un seul fichier à la fois, la LTO peut optimiser les fichiers entre eux, ce qui améliore à la fois la vitesse du programme et la taille du code.

De plus, suite au topic GCC vs Renesas SHC compiler de CalcLoverHK, j'ai modifié la configuration de GCC pour utiliser une version plus rapide du code de calcul en point flottant ("soft-fp" au lieu de "fp-bit"). Ça donne une accélération entre 2x et 3x pour les calculs en float et double en C, ce qui affecte vos add-ins mais aussi les fonctions de maths de la lib standard.

Instructions de mise à jour

Cette mise à jour du fxSDK contient une mise à jour de GCC. Modifier le compilateur signifie qu'il faut réinstaller tout le reste des bibliothèques (surtout si on utilise la LTO), du coup il n'y a pas vraiment de "mise à jour" ici c'est surtout une désinstallation + réinstallation.

Avec GiteaPC, désinstallez d'abord tous les dépôts liés au SDK, ce qui probablement tous sauf GiteaPC lui-même (utilisez giteapc list pour avoir la liste) :

% giteapc uninstall sh-elf-binutils sh-elf-gcc sh-elf-gdb gint OpenLibm fxlibc libprof # ... et autre bibliothèques
% giteapc uninstall fxsdk

Ensuite resuivez la procédure d'installation, ce qui vous donne ça en accéléré :

% giteapc install Lephenixnoir/fxsdk Lephenixnoir/sh-elf-binutils Lephenixnoir/sh-elf-gcc
% giteapc install Lephenixnoir/sh-elf-gdb
% giteapc install Lephenixnoir/OpenLibm Vhex-Kernel-Core/fxlibc
% giteapc install Lephenixnoir/sh-elf-gcc
% giteapc install Lephenixnoir/gint # ... et autres bibliothèques

Ça va recompiler binutils, gcc et gdb ce qui prend du temps. Selon la puissance de votre machine comptez entre 15 minutes et une heure. Vous pouvez faire autre chose en même temps, il vous suffit de garder un oeil dessus.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2325 Défis: 17 Message

Citer : Posté le 09/07/2024 09:58 | #


J'avais pas vu passer ce post, la LTO et l'amélioration des calculs en float me semblent vraiment très intéressants.
Je vais tester sur la librairie cBox2D qui utilise intensément les calculs en virgule flottante pour voir si on observe une amélioration des performances.

Je ferai un petit post au passage pour vous donner les résultats.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Slyvtt Hors ligne Maître du Puzzle Points: 2325 Défis: 17 Message

Citer : Posté le 09/07/2024 21:33 | # | Fichier joint


Je rencontre des problèmes en cascade avec la compilation de cBox2D.

Après avoir réinstallé toutes les composantes du fxSDK, je me prends des erreurs sur un manque de header dans la freestanding :

<giteapc> Slyvtt/cBox2D: Building
[ 2%] Building CXX object CMakeFiles/cBox2D.dir/src/collision/b2_broad_phase.cpp.obj
Dans le fichier inclus depuis /home/sylvain/.local/share/fxsdk/sysroot/sh3eb-elf/include/c++/14.1.0/cmath:41,
depuis /home/sylvain/.local/share/fxsdk/sysroot/sh3eb-elf/include/c++/14.1.0/math.h:36,
depuis /home/sylvain/.local/share/giteapc/Slyvtt/cBox2D/include/box2d/b2_math.h:26,
depuis /home/sylvain/.local/share/giteapc/Slyvtt/cBox2D/include/box2d/b2_collision.h:29,
depuis /home/sylvain/.local/share/giteapc/Slyvtt/cBox2D/include/box2d/b2_broad_phase.h:28,
depuis /home/sylvain/.local/share/giteapc/Slyvtt/cBox2D/src/collision/b2_broad_phase.cpp:23:
/home/sylvain/.local/share/fxsdk/sysroot/sh3eb-elf/include/c++/14.1.0/bits/requires_hosted.h:34:4: erreur: #error "This header is not available in freestanding mode."
34 | # error "This header is not available in freestanding mode."
| ^~~~~
Dans le fichier inclus depuis /home/sylvain/.local/share/fxsdk/sysroot/sh3eb-elf/include/c++/14.1.0/bits/specfun.h:47,
depuis /home/sylvain/.local/share/fxsdk/sysroot/sh3eb-elf/include/c++/14.1.0/cmath:3898:
/home/sylvain/.local/share/fxsdk/sysroot/sh3eb-elf/include/c++/14.1.0/tr1/gamma.tcc: Dans la fonction « _Tp std::__detail::__log_gamma(_Tp) »:
/home/sylvain/.local/share/fxsdk/sysroot/sh3eb-elf/include/c++/14.1.0/tr1/gamma.tcc:236:18: erreur: « __throw_domain_error » n'est pas un membre de « std »; vouliez-vous employer « __throw_runtime_error » ?
236 | std::__throw_domain_error(__N("Argument is nonpositive integer "
| ^~~~~~~~~~~~~~~~~~~~
| __throw_runtime_error


Je mets la sortie complète de l'installation avortée de cBox2D en PJ.
Est-ce lié à la montée de version de GCC en 14.1.0 ?
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir Hors ligne Administrateur Points: 24337 Défis: 170 Message

Citer : Posté le 09/07/2024 22:04 | #


Ajoute -fno-freestanding aux flags de compilation. Le fxSDK utilise -ffreestanding parce que l'environnement d'exécution était historiquement loin du standard. Mais ça implique un mode dégradé pour la lib C++. On doit être capables de l'enlever maintenant ; je vais expérimenter en local sans -ffreestanding et on verra.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt Hors ligne Maître du Puzzle Points: 2325 Défis: 17 Message

Citer : Posté le 10/07/2024 07:57 | #


Merci Lephe, ça passe crème en effet désormais.

Je mettrai à jour le dépôt afin de tenir compte de ces erreurs.

J'ai donc pu comparer le même exécutable (le programme d'exemple d'application de cBox2D) et le gain de performance est vraiment notable.

Lorsque il n'y a pas d'objet "dynamique", les temps d'update de la boucle de calcul Box2D passent de 0,225ms à 0,194ms. Ce qui n'est pas énorme, par contre on a un FPS qui passe de 49ips à 51ips.

Lors de la mise en place de blocs "dynamiques", avec calculs de collisions et de gravité, là le gain devient vraiment très impressionnant. Avec 11 blocs rectangulaires, je passe de 1-2ips (voir moins) à 10-12ips.

Il faudrait que je regarde plus dans le détail, mais ça rentabilise le prix d'une recompilation

Par contre pour la taille de l'addin, je note une augmentation de taille. Celui-ci passe de 259ko à 266ko. C'est pas énorme, mais on a une légère perte.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Précédente 1, 2, 3 ··· 10 ··· 20 ··· 30 ··· 38, 39, 40, 41

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 31 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