Forums Casio - Projets de programmation

Index du Forum > Projets de programmation > gint : un environnement de développement d'add-ins
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Posté le 20/02/2015 17:30

gint : un environnement de développement d'add-ins :

En général, quand on veut écrire un add-in, on dégaine le fx-9860G SDK de Casio et sa bibliothèque fxlib, ou bien le PrizmSDK si la calculatrice visée est en couleurs.

gint est une alternative à tout ça. C'est un environnement de développement qui fonctionne sous Linux (et avec un peu de travail sous Windows) et vous permet de créer des add-ins avec gcc et sa suite. Il marche bien sur Graph monochromes, et je suis en train de le porter sur Graph 90. Un joli programme !

Comparé aux SDKs habituels, gint est plus proche du matériel et contrôle donc le clavier, l'écran ou l'horloge avec plus de finesse. Concrètement, ça veut dire que vous pouvez appuyer sur plusieurs touches à la fois, faire exécuter une fonction toutes les 5 ms, ou ne rafraîchir que la moitié de l'écran.

gint sur Graph monochrome



gint existe sur Graph monochrome depuis un moment et le cœur de la bibliothèque arrivera bientôt à sa version finale.

Comparé à fxlib, vous pouvez faire ce genre de joyeusetés...
– Des graphismes en 4 couleurs avec le moteur de gris
– Un contrôle détaillé du clavier pour les jeux, parfait pour les combos !
– Des timers avec une précision de 30 µs, d'autres à 60 ns
– Des fonctions de dessin de texte et d'image fulgurantes
– La conversion automatique des images grâce à fxconv (du fxSDK)
– La compatibilité SH3 et SH4 sans avoir à modifier les sources.

L'inconvénient principal est que gint est un gros morceau qui se baladera dans votre g1a. Ça représenté environ 30 ko, que vous pouvez comparer au 18 ko de sprintf() quand vous utilisez le SDK !

gint sur Graph 90



gint était à l'origine conçu pour Graph 85. J'avance tranquillement sur le portage avec la Graph 90, qui demande de réorganiser pas mal de code. J'arrive désormais à faire pas mal de choses :
– Installer gint et remplacer le gestionnaire d'interruptions
– Communiquer avec l'écran (méthode lente et non finale)
– Utiliser les 9 timers disponibles
– Configurer la RTC (horloge) et l'utiliser comme un timer
– Mesurer la fréquence des horloges (préparatif pour l'overclock)
– Les fondamentaux sur la manipulation du clavier

Si vous avez déjà programmé une Prizm, vous savez qu'il y a une bande blanche dans laquelle on ne peut rien afficher. Ce genre de choses se contourne bien avec gint, comme le montre la photo

Tester gint sur une Graph monochrome

Note : la procédure ci-dessous est pour la dernière version publique de gint, que j'ai publiée avant d'attaquer le portage sur Graph 90. Ça date un peu ^^'

Si vous avez un moment, je suis toujours à la recherche de tests pour vérifier que tout marche bien. Vous en avez pour 15 minutes environ !

1. Transférez l'add-in de test de gint (téléchargeable ici), sur votre machine, et lancez-le en maintenant EXE appuyé. L'écran de contrôle (image 1) apparaît.
2. Notez ses contenus quelque part pour me les envoyer. S'il n'y a pas "Boot OK" en haut à droite, faites un RESET et arrêtez là, car gint ne fonctionne pas. Sinon, appuyez sur une touche.
3. Effectuez les différents tests de l'onglet TEST. N'hésitez pas à signaler ce qui peut vous sembler bizarre !


Images 1 et 2 : L'écran de contrôle de gint, et le menu principal

Keyboard & events : vous devez pouvoir appuyer sur 3 ou 4 touches simultanément et visualiser des nom et nombre de répétition corrects, même si vous suivez des séquences exotiques. Vous pouvez voir le shadowing en constant que Left + Down + SHIFT déclenche ALPHA.
Gray engine : vérifiez que le réglage initial (DEFT) est satisfaisant pour un contraste moyen. Vous pouvez jouer avec les délais et voir comment l'illusion varie.
Image rendering : les images doivent s'afficher correctement dans tous les positions, mêmes si elles dépassent de l'écran.
Text rendering : vous devez voir les 6 lignes de 32 caractères en entier pour chaque police.
Real-time clock : l'horloge doit avancer seconde après seconde. Mettez-la à l'heure ou modifiez légèrement l'heure indiquée : le réglage doit persister.
Clocks and timers : dans l'onglet TIME, le timer et l'horloge doivent avancer sensiblement à la même vitesse.

4. Placez-vous ailleurs que dans le menu principal, appuyez sur MENU et vérifiez que vous retournez bien au menu de la calculatrice. Retournez dans l'application de test, vous devez réapparaître à l'endroit où vous l'aviez laissée.
5. Envoyez-moi vos résultats par un message sur ce topic. Et soyez remerciés !

Installer et utiliser gint sur votre système, pour développer

L'utilisation normale de gint est en l'associant avec le fxSDK, qui fournit les options de compilation/édition des liens appropriées, le linker script particulier de gint ainsi que les outils de conversion compatibles avec la bibliothèque. Si vous voulez utiliser le fxSDK tout entier (recommandé), suivez ses instructions d'installation, gint est fourni avec.

Une fois que gint est installé sur votre système, voyez les tutoriels de développement pour avoir un aperçu de son fonctionnement. La plupart des choses sont expliquées dans les en-têtes (fichiers .h) de la bibliothèque. Ils sont tous dans le sous-dossier gint du dossier d'installation du fxSDK, que vous pouvez afficher en exécutant fxsdk --folder.

Si vous voulez utiliser directement gint sans le fxSDK (soyez sûrs que vous savez ce que vous faites), vous pouvez ou télécharger l'archive, ou le compiler à la main. Notez que la compilation requiert quand même le fxSDK... pas besoin de l'installer par contre, il vous suffit de placer fxsdk/bin dans le PATH après compilation.

$ git clone "http://git.planet-casio.com/lephe/gint" && cd gint
$ ./configure --startup-log # Ce que vous voulez
$ make all-lib

Ici aussi, vous ne voudrez probablement pas l'installer, juste linker la bibliothèque. Je rappelle que l'ordre de linkage compte, et que vous devez absolument compiler avec gcc <options> <objets...> -lgint -lc -lgcc, et dans cet ordre.


Comment ça marche

gint est essentiellement organisé autour d'un gestionnaire d'interruptions, une routine qui répond aux signaux émis par les composants pour signaler des événements intéressants (décompte du temps, timer arrivé à expiration, touches du clavier pressées, données reçues sur le port série... entre 20 et 40 sources différentes sur la calculatrice). Normalement c'est le système qui fournit le sien, mais gint le change parce qu'il a besoin de le contrôler pour implémenter ses fonctionnalités et se rendre indépendant de fxlib.

Une fois qu'on contrôle les interruptions, installer un moteur de gris avec un timer à deux délais est un jeu d'enfant. Le moteur de Kucalc (Revolution-FX) ne les contrôlait pas, et devait toutes les supprimer sauf celle du timer, désactivant du même coup les autres timers, l'horloge, la fonction GetKey()... tout un dérangement qui se soldait par un redémarrage à la fin de l'exécution.


Fichier joint



Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Dernier message de la page précédente :Posté le 15/08/2018 11:22 |
Bizarre, il me semblait que tu perdais la transparence avec ça. Bref, je regarderai en détail ce soir.
Merci pour le coup de main
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya



Pages: Précédente | 1 ... , 7, 8, 9, 10, 11, 12, 13, 14 | Suivante

Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 15/08/2018 11:27 | #
Ahaaa oui, ça a peut-être un lien d'ailleurs. xD

Ajouté le 15/08/2018 à 14:58 :
Après avoir testé avec un bon niveau de détail les réactions du clavier, j'ai pu formuler un workaround autour des artefacts que j'avais observés. C'est un peu moche, mais ça marche.

J'ai publié un topic sur Casiopeia pour récupérer des informations sur le comportement du clavier et tenter d'expliquer ce bug, pour le fixer plus tard. Pour l'instant, ça marche, donc je ne me plains pas.

Pour ceux que ça pourrait intéresser, le topic est ici : Unraveling the secrets of the KEYSC

Je vais ensuite porter le driver SH3 et commencer à remonter l'abstraction du clavier.

Par niveau d'abstraction, j'entends...

- Ports I/O (à coder sur SH3)
- États des touches (donné par le KEYSC sur SH4, à faire sur SH3)
- Évènements (fait)
- getkey() (à faire)

Un truc qui est cool, d'ailleurs : mon nouveau driver pour le clavier vous permet de détecter efficacement des combos de touches au clavier. Ça va pouvoir envoyer du ninja dans les jeux !
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 15/08/2018 15:09 | #
mon nouveau driver pour le clavier vous permet de détecter efficacement des combos de touches au clavier


Comment tu fais pour passer outre le ghosting ?
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 15/08/2018 15:50 | #
Je n'outrepasse pas le ghosting.
----------------------------------
Rise.
Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Citer : Posté le 15/08/2018 21:36 | #
Eh Lephe…
/usr/share/fxsdk/gint/bopti.h:26:2: error: unknown type name 'uint8_t':
J'ai changé l'ordre des inclusions de headers, mais fait gaffe
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 16/08/2018 12:25 | #
Hmm, je suis très attentif sur ce genre de problèmes, normalement. Il m'arrive de faire quelques oublis ; je viens de commit celui-ci.

Ajouté le 18/08/2018 à 21:00 :
J'ai terminé de régler les ultimes bugs sur le scan du clavier sur SH4.

gint possède donc un tout nouveau driver clavier sur SH4, performant et qui marche très bien sous overclock ! o/

J'enchaîne le plus vite possible avec getkey() et les fonctions associées.

Ajouté le 18/08/2018 à 22:17 :
J'ai aussi porté la routine de scan de clavier sous SH3, qui est pas très difficile et qui supporte également l'overclock.

J'ai cependant découvert que la machine a tendance à freezer quand gint se termine sur SH3 si le niveau d'overclock est trop élevé. Je vais voir d'où vient ce nouveau problème avant de clore le clavier.

Ajouté le 19/08/2018 à 13:46 :
J'ai trouvé d'où venait le bug : une précaution que j'avais prise lors de la restauration des paramètres des timers additionnels semble casser quand le processeur est trop rapide. On se retrouve avec des paramètres mal ajustés et le scan clavier ne se produit plus une fois de retour dans l'OS, d'où un freeze apparent.

A priori tout marche bien pour le clavier donc, avec ou sans overclock, sur toutes les Graph monochromes.

Ajouté le 19/08/2018 à 14:08 :
Et du coup, j'ai également porté ce driver sur la Graph 90. J'ai également découvert que (en gros) le clavier se comporte bizarrement quand le niveau d'overclock est trop faible.

- Sur Graph 75, il faut descendre à 5 MHz de fréquence, donc aucun risque
- Sur Graph 90, la fréquence normale est le minimum à ne pas franchir.

J'espère comprendre pourquoi tout cela se produit en discutant sur Casiopeia, où j'explique ce que j'ai repéré pour l'instant dans le topic linké précédemment : Unraveling the secrets of the KEYSC.

D'ici là, les fondamentaux du clavier marchent sur toutes les calculatrices ! o/

Ajouté le 19/08/2018 à 20:27 :
Mon support est actuellement uniforme, je peux faire exactement les mêmes choses sur SH3, sur SH4 et sur Graph 90. Ce qui signifie :

- Prendre le contrôle du matériel et des interruptions
- Mesurer la fréquence des signaux d'horloge (prémisses à l'overclock)
- Manipuler l'horloge et les timers
- Contrôler finement les événements qui se produisent sur le clavier
- Communiquer avec l'écran complètement (Graph 75) ou basiquement (Graph 90)

Pour ceux qui savent de quoi je parle, j'ai des drivers pour le TLB (SH3/SH4), le PFC (SH3), le clavier par ports (SH3), le KEYSC (SH4), la RTC (SH3/SH4), le TMU (SH3/SH4), le CPG (SH3/SH4), l'écran monochrome T6K11 (SH3/SH4 monochrome), et des tests sur l'écran couleur R61524 (Graph 90).

Dans mon viseur, j'ai pour la suite...

- Porter les routines de dessin (éventuellement optimiser au passage) et les fontes
- Compléter le driver de l'écran sur Graph 90
- Récupérer le moteur de gris
- Divers trucs internes.

C'est un peu soudain, mais j'avance assez bien... je vois presque le bout, vous imaginez

Enfin, et pas des moindres, Memallox est en train de lancer un port de newlib possiblement compatible avec gint, qui pourrait nous donner la lib standard qu'il nous a toujours manqué ! Suivez ce topic de près car il vous sera certainement utile

Ajouté le 20/08/2018 à 16:54 :
Vous n'imagineriez pas qu'une seule lettre de typo vous casse LINK...

for(gint_driver_t *drv = &edrv; (--drv) >= &edrv;)
{
    if(drv->unload) drv->unload();
    if(drv->ctx_restore) drv->ctx_restore(drv->sys_ctx);
}

Cette boucle est supposée décharger les timers et restaurer les paramètres du système. Hier j'ai changé l'ordre pour parcourir les drivers du début à la fin.

Mais voilà, j'ai laissé edrv (end drivers) dans (--drv) >= &edrv au lieu de changer pour bdrv (beginning drivers), et du coup rien n'était déchargé. En particulier les paramètres des timers n'étaient pas restaurés, donc ils restaient stoppés.

Maintenant, on se rappelle que LINK utilise beaucoup les timers, et voilà ! Un bug d'une lettre qui survit 18 heures.
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 21/08/2018 15:42 | #
J'ai une erreur bizarre quand je fais "make" ou "make all-lib" (la même) :
Zezombye@Zez-PC2 ~/gint
$ make all-lib
fxconv -font src/display/font_system.bmp
sh3eb-elf-objcopy: option `--input' is ambiguous
Usage: sh3eb-elf-objcopy [option(s)] in-file [out-file]
Copies a binary file, possibly transforming it in the process
The options are:
  -I --input-target <bfdname>      Assume input file is in format <bfdname>
  -O --output-target <bfdname>     Create an output file in format <bfdname>
  -B --binary-architecture <arch>  Set output arch, when input is arch-less
  -F --target <bfdname>            Set both input and output format to <bfdname>
     --debugging                   Convert debugging information, if possible
  -p --preserve-dates              Copy modified/access timestamps to the output
  -D --enable-deterministic-archives
                                   Produce deterministic output when stripping archives
  -U --disable-deterministic-archives
                                   Disable -D behavior (default)
  -j --only-section <name>         Only copy section <name> into the output
     --add-gnu-debuglink=<file>    Add section .gnu_debuglink linking to <file>
  -R --remove-section <name>       Remove section <name> from the output
     --remove-relocations <name>   Remove relocations from section <name>
  -S --strip-all                   Remove all symbol and relocation information
  -g --strip-debug                 Remove all debugging symbols & sections
     --strip-dwo                   Remove all DWO sections
     --strip-unneeded              Remove all symbols not needed by relocations
  -N --strip-symbol <name>         Do not copy symbol <name>
     --strip-unneeded-symbol <name>
                                   Do not copy symbol <name> unless needed by
                                     relocations
     --only-keep-debug             Strip everything but the debug information
     --extract-dwo                 Copy only DWO sections
     --extract-symbol              Remove section contents but keep symbols
  -K --keep-symbol <name>          Do not strip symbol <name>
     --keep-file-symbols           Do not strip file symbol(s)
     --localize-hidden             Turn all ELF hidden symbols into locals
  -L --localize-symbol <name>      Force symbol <name> to be marked as a local
     --globalize-symbol <name>     Force symbol <name> to be marked as a global
  -G --keep-global-symbol <name>   Localize all symbols except <name>
  -W --weaken-symbol <name>        Force symbol <name> to be marked as a weak
     --weaken                      Force all global symbols to be marked as weak
  -w --wildcard                    Permit wildcard in symbol comparison
  -x --discard-all                 Remove all non-global symbols
  -X --discard-locals              Remove any compiler-generated symbols
  -i --interleave[=<number>]       Only copy N out of every <number> bytes
     --interleave-width <number>   Set N for --interleave
  -b --byte <num>                  Select byte <num> in every interleaved block
     --gap-fill <val>              Fill gaps between sections with <val>
     --pad-to <addr>               Pad the last section up to address <addr>
     --set-start <addr>            Set the start address to <addr>
    {--change-start|--adjust-start} <incr>
                                   Add <incr> to the start address
    {--change-addresses|--adjust-vma} <incr>
                                   Add <incr> to LMA, VMA and start addresses
    {--change-section-address|--adjust-section-vma} <name>{=|+|-}<val>
                                   Change LMA and VMA of section <name> by <val>
     --change-section-lma <name>{=|+|-}<val>
                                   Change the LMA of section <name> by <val>
     --change-section-vma <name>{=|+|-}<val>
                                   Change the VMA of section <name> by <val>
    {--[no-]change-warnings|--[no-]adjust-warnings}
                                   Warn if a named section does not exist
     --set-section-flags <name>=<flags>
                                   Set section <name>'s properties to <flags>
     --add-section <name>=<file>   Add section <name> found in <file> to output
     --update-section <name>=<file>
                                   Update contents of section <name> with
                                   contents found in <file>
     --dump-section <name>=<file>  Dump the contents of section <name> into <file>
     --rename-section <old>=<new>[,<flags>] Rename section <old> to <new>
     --long-section-names {enable|disable|keep}
                                   Handle long section names in Coff objects.
     --change-leading-char         Force output format's leading character style
     --remove-leading-char         Remove leading character from global symbols
     --reverse-bytes=<num>         Reverse <num> bytes at a time, in output sections with content
     --redefine-sym <old>=<new>    Redefine symbol name <old> to <new>
     --redefine-syms <file>        --redefine-sym for all symbol pairs
                                     listed in <file>
     --srec-len <number>           Restrict the length of generated Srecords
     --srec-forceS3                Restrict the type of generated Srecords to S3
     --strip-symbols <file>        -N for all symbols listed in <file>
     --strip-unneeded-symbols <file>
                                   --strip-unneeded-symbol for all symbols listed
                                     in <file>
     --keep-symbols <file>         -K for all symbols listed in <file>
     --localize-symbols <file>     -L for all symbols listed in <file>
     --globalize-symbols <file>    --globalize-symbol for all in <file>
     --keep-global-symbols <file>  -G for all symbols listed in <file>
     --weaken-symbols <file>       -W for all symbols listed in <file>
     --add-symbol <name>=[<section>:]<value>[,<flags>]  Add a symbol
     --alt-machine-code <index>    Use the target's <index>'th alternative machine
     --writable-text               Mark the output text as writable
     --readonly-text               Make the output text write protected
     --pure                        Mark the output file as demand paged
     --impure                      Mark the output file as impure
     --prefix-symbols <prefix>     Add <prefix> to start of every symbol name
     --prefix-sections <prefix>    Add <prefix> to start of every section name
     --prefix-alloc-sections <prefix>
                                   Add <prefix> to start of every allocatable
                                     section name
     --file-alignment <num>        Set PE file alignment to <num>
     --heap <reserve>[,<commit>]   Set PE reserve/commit heap to <reserve>/
                                   <commit>
     --image-base <address>        Set PE image base to <address>
     --section-alignment <num>     Set PE section alignment to <num>
     --stack <reserve>[,<commit>]  Set PE reserve/commit stack to <reserve>/
                                   <commit>
     --subsystem <name>[:<version>]
                                   Set PE subsystem to <name> [& <version>]
     --compress-debug-sections[={none|zlib|zlib-gnu|zlib-gabi}]
                                   Compress DWARF debug sections using zlib
     --decompress-debug-sections   Decompress DWARF debug sections using zlib
     --elf-stt-common=[yes|no]     Generate ELF common symbols with STT_COMMON
                                     type
  -M  --merge-notes                Remove redundant entries in note sections
      --no-merge-notes             Do not attempt to remove redundant notes (default)
  -v --verbose                     List all object files modified
  @<file>                          Read options from <file>
  -V --version                     Display this program's version number
  -h --help                        Display this output
     --info                        List object formats & architectures supported
sh3eb-elf-objcopy: supported targets: elf32-sh elf32-shl coff-sh coff-shl coff-sh-small coff-shl-small elf32-s                         h64 elf32-sh64l elf64-sh64 elf64-sh64l elf64-little elf64-big elf32-little elf32-big plugin srec symbolsrec ve                         rilog tekhex binary ihex
error: objcopy returned 256
     ar libgint.a
sh3eb-elf-ar: build/display_font_system.bmp.o: No such file or directory
make: *** [Makefile:172: libgint.a] Error 1


Il y a déjà un dossier build dans le dossier gint, donc ça vient pas de là.
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 21/08/2018 16:01 | #
Je comprends le problème, j'ai commit un fix possible. Tu as quelle version d'objcopy, par curiosité ? Les versions dont je dispose comprennent très bien l'option --input.

Il faut que tu recompiles et réinstalles le fxSDK. J'ai bon espoir que ça marchera mieux.
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 22/08/2018 00:29 | #
Ca compile (j'ai tout refait l'installation de fxlib puis de gint avec make all-lib), par contre j'ai toujours la même erreur du linker.ld qui est inexistant :/

J'ai objcopy 2.30 d'ailleurs.
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 22/08/2018 08:05 | #
Si tu veux que le fichier linker.ld apparaisse dans le dossier du fxSDK, il faut bien sûr installer avec make install. Je reconnais que le tuto n'est pas très clair sur ce point.
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 22/08/2018 19:57 | #
Ah oui, j'avais oublié ça.

Du coup maintenant j'ai des erreurs de linker :
LINK build/firmware.elf
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld:/usr/share/fxsdk/linker.ld:17: warning: redeclaration of memory region `rom'
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld:/usr/share/fxsdk/linker.ld:19: warning: redeclaration of memory region `ram'
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: build/firmware.elf section `.data' will not fit in region `ram'
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: section C LMA [0000000000336f80,0000000000337657] overlaps section .gint LMA [0000000000336f80,000000000033765f]
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: section .gint_bss LMA [0000000000337660,0000000000337a6f] overlaps section D LMA [0000000000337658,00000000003376bf]
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: region `ram' overflowed by 3284 bytes
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: warning: section `.bss' type changed to PROGBITS


Si j'enlève le "-T addin.ld" de la compilation, ça me donne ça :
LINK build/firmware.elf
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: build/firmware.elf section `.data' will not fit in region `ram'
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: section C LMA [0000000000336f78,000000000033764f] overlaps section .gint LMA [0000000000336f78,0000000000337657]
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: section .gint_bss LMA [0000000000337658,0000000000337a67] overlaps section D LMA [0000000000337650,00000000003376b7]
/home/Zezombye/opt/sh3eb-elf/lib/gcc/sh3eb-elf/7.3.0/../../../../sh3eb-elf/bin/ld: region `ram' overflowed by 3280 bytes
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 23/08/2018 08:44 | #
Si j'enlève le "-T addin.ld" de la compilation, ça me donne ça :

Si tu regardes les tutoriels d'utilisation de gint, ça ne mentionne pas de -T. Tu es en train de mélanger du gint et du fxlib, comme prévu...

Pour les overlaps, vérifie que dans /usr/share/fxsdk/linker.d, il y a une ligne qui indique *(C), une qui indique *(D), une *(.gint) et un *(.gint_bss).

L'erreur principale est que tu as 3280 octets en trop dans la RAM. Il faut réduire ça (rappel : gint prend aussi un peu de place, notamment à cause de la VRAM).
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 23/08/2018 08:56 | #
Si tu regardes les tutoriels d'utilisation de gint, ça ne mentionne pas de -T.


Ouaip, le -T vient du tuto du sh3eb-elf-gcc, je l'ai enlevé parce que je me suis dit que 2 linkers allaient causer des conflits.

Pour les overlaps, vérifie que dans /usr/share/fxsdk/linker.d, il y a une ligne qui indique *(C), une qui indique *(D), une *(.gint) et un *(.gint_bss).


J'imagine que tu voulais dire linker.ld ? Si oui, il n'y a aucune de ces 4 sections.

L'erreur principale est que tu as 3280 octets en trop dans la RAM. Il faut réduire ça (rappel : gint prend aussi un peu de place, notamment à cause de la VRAM).


Hmm. Est ce qu'il y a moyen d'enlever les parties de gint qui ne me servent pas (tout sauf le getkey) ?

Alternativement, est ce que je peux utiliser fxconv sans pour autant utiliser gint ? Dans ce cas j'utiliserai juste un syscall pour le getkey.
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 23/08/2018 09:07 | #
J'imagine que tu voulais dire linker.ld ? Si oui, il n'y a aucune de ces 4 sections.

Je me suis un peu trompé. Les sections .gint et .gint_bss sont bien à leur place, cependant dans la version actuelle de gint je n'avais pas prévu l'utilisation de fxlib. J'ai push un nouveau linker script qui les mentionne (il te suffit de pull puis make install depuis le dossier de gint).

Hmm. Est ce qu'il y a moyen d'enlever les parties de gint qui ne me servent pas (tout sauf le getkey) ?

Malheureusement non. Tu ne peux pas dire au système « ok, gint prend juste une partie du matériel, tu promets de ne pas y toucher hein ? ». Le clavier requiert les timers, donc c'est très mal barré. De façon générale c'est impossible.

Alternativement, est ce que je peux utiliser fxconv sans pour autant utiliser gint ? Dans ce cas j'utiliserai juste un syscall pour le getkey.

Ça tu peux, toutefois le format de conversion des images et polices est une de mes inventions et l'algorithme de dessin est implémenté dans gint. Il suppose une VRAM alignée correctement, pas comme celle du système...

Note : Je t'avais dit que ça n'allait pas marcher tout seul si tu essayais de mélanger les deux.
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 23/08/2018 09:11 | #
Note : Je t'avais dit que ça n'allait pas marcher tout seul si tu essayais de mélanger les deux.


Mais je comprends pas, je voulais installer fxlib pour avoir le getkey et fxconv, fxlib requiert d'installer gint, et il faut pas installer fxlib+gint alors que gint est une dépendance de fxlib ? x)
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Dark storm
Hors ligne
Membre d'honneur
Points: 10691
Défis: 174
Message
Citer : Posté le 23/08/2018 09:18 | #
Nan. gint est standalone. C'est limite un kernel, donc il se suffit à lui-même.
fxlib, c'est la tambouille de Casio.

Lephe a créé gint justement pour se passer de fxlib, donc autant éviter d'utiliser les deux.

fxconv est un utilitaire fourni avec gint

Un schéma plus clair :

- fxlib
    - int GetKey(unsigned int *key)
    - void locate(int x, int y)
    - void Print(unsigned char *str)
- gint
   - int getkey(void)
   - dprint(char *str, int x, int y)
   - fxconv
----------------------------------
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Páranÿe quetë Quendya
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 23/08/2018 09:31 | #
Je précise un peu même si Darks a dit le principal.

Pour développer sous Linux, l'indispensable c'est d'installer GCC et le g1a-wrapper.

Ensuite, deux environnements d'exécution sont possibles :
- "fxlib/gcc", qui typiquement utilisera libfx.a, addin.ld et crt0.s
- "gint", qui utilise le fxSDK, fxconv et ses propres linker scripts

Désolé si ce n'était pas clair.
----------------------------------
Rise.
Zezombye
Hors ligne
Rédacteur
Points: 1531
Défis: 12
Message
Citer : Posté le 23/08/2018 09:48 | #
Heu, fxsdk pardon.

Du coup on peut pas mélanger fxlib et gint ?
----------------------------------
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 23/08/2018 10:02 | #
Zezombye a écrit :
Heu, fxsdk pardon.

gint et le fxSDK sont un peu intriqués à cause de la police par défaut de gint. J'aurais aimé que gint ne dépende pas du fxSDK mais en pratique, ça ne se passe pas comme je le voudrais...

Du coup on peut pas mélanger fxlib et gint ?

Ce sont deux systèmes qui ne sont pas faits pour être mélangés. On peut faire des choses avec un bout de l'un et un bout de l'autre, quand on sait ce qu'on fait, mais tu ne peux pas dire « je vais faire un projet avec les deux » et utiliser SetTimer() d'un côté et getkey() de l'autre, ou Bdisp_PutDisp_DD() avec dimage(). Ça c'est clairement impossible.
----------------------------------
Rise.
Nemhardy
Hors ligne
Grand maître des Traits d'Esprit
Points: 1232
Défis: 54
Message
Citer : Posté le 29/08/2018 11:45 | #
Juste pour signaler qu'avec framapic, c'est aussi des images du post principal qui sont parties… Si jamais tu les as encore sous la main LePhé… ^^'
----------------------------------
N'attendez pas qu'il n'y ait plus de miel : スススススススススススススススススススススススススス養蜂家スススススススススススススススススススススススススススススススススススス蜂家
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 29/08/2018 11:46 | #
J'ai remarqué ça, je ne crois pas les avoir en local, j'attendais de voir si framapic revenait ou si j'attendais juste la prochaine version pour refaire tout le post principal.

Ajouté le 15/09/2018 à 14:07 :
J'ai mis au clair les irrégularités dans les données renvoyées par le clavier !

En fait l'interface du KEYSC qui est supposée donner l'état individuel (appuyée / relâchée) de toutes les touches ne donne des bons résultats que si on lit les données assez souvent.

J'ai posté à ce sujet sur Casiopeia : http://www.casiopeia.net/forum/viewtopic.php?p=20592#p20592

Après avoir réglé encore quelques bugs de timers (décidément !), le clavier semble prêt à roller sur toutes les plateformes ! Je vais pouvoir reprendre le développement à une vitesse raisonnable (jusqu'au prochain bug) !
----------------------------------
Rise.

Pages: Précédente | 1 ... , 7, 8, 9, 10, 11, 12, 13, 14 | Suivante

Index du Forum > Projets de programmation > gint : un environnement de développement d'add-ins

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

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd