π
<-
Chat plein-écran
[^]

question sdk graph 90+e/ portage CAS

Programmation et implémentation d'algorithmes.

Re: question sdk graph 90+e/ portage CAS

Message non lude Nemhardy » 24 Mai 2018, 00:14

Salut, je vais essayer de répondre à plusieurs points évoqués ici… ^^

Pour ce qui est de la question de la mémoire disponible : en effet, plusieurs Mo de ROM disponibles, on sait que des addins de taille de l'ordre d'un Mo ne posent pas de problème, il n'y a pas vraiment d'info disponible vis à vis d'une taille limite pour que tout se passe bien. Tu sais quelle ordre de taille serait nécessaire pour GIAC ?

Vis à vis de la RAM, c'est un peu inhabituel : on a un découpage stack / heap opposé à ce qu'on trouve en général, c'est à dire de l'ordre de 500ko de mémoire statique, et de l'ordre de 130ko pour la heap (zone concernée par les allocations dynamiques à coup de `malloc` & co), ça oblige à penser un peu différemment pour utiliser au mieux la mémoire, à l'inverse de programmation sur PC où on a une stack assez petite (quelques Mo en général), et une heap de plusieurs gigas, à priori. J'avais détaillé un peu quelques approches par rapport à ça ici, voir notamment la partie sur `memmgr` (utilisé par Gbl08ma dans Eigenmath notamment).
Il y a quelques pistes pour pouvoir avoir accès à un peu plus de mémoire (au moins ~160ko, si je me souviens bien de ce qui peut être fait) si ça devait être nécessaire.

Pour la question du `new`, le support du C++ est assez limité, pas de STL à ce jour par exemple, on peut réimplémenter `new` / `delete` sans trop de soucis en revanche.

Ensuite, pour les streams : si tu utilises la dernière version de la `libfxcg` (je décraivais comment se mettre à jour dans le topic évoqué plus tôt par Critor, et si tu es sous Linux pour développer, ça ne sera pas bien plus compliqué), tu as accès à ces flux standards d'une certaine manière : globalement, voici ce que l'en-tête `stdio.h` propose : https://github.com/Jonimoose/libfxcg/bl ... de/stdio.h ; pour être honnête, je ne sais pas à quel point c'est utilisable, ne m'en étant jamais vraiment servi, de plus le mode console implémenté m'a l'air d'être assez rudimentaire, tu peux en voir le code ici.
Je pense que ça s'explique car le mode console n'a jamais vraiment été une évidence sur une telle machine, je me souviens avoir vu passer quelques discussions où l'on cherchait à savoir s'il fallait plutôt utiliser le port série comme interface pour les flux ou plutôt implémenter une console, ce qui n'est pas vraiment le rôle d'une `libc` normalement, etc.
Je pense que pour faire une interface utilisable et assez souple pour ce que tu veux faire, il faudra sans doute mettre un peu les mains dans le cambouis, malheureusement… :s
Ce que propose Zezombye me semble être quand même envisageable.

Par rapport au wiki de Cemetech : une fois que tu as un environnement qui fonctionne et est à jour, je trouve que c'est une bonne doc, plutôt fiable. Au niveau des détails bas niveau, on ne fait pas vraiment mieux, et la documentation des syscalls disponibles dans la `libfxcg` a tendance à être plus claire, précise et accessible que ce qui se trouve ailleurs (type la doc de SimLo). Le problème c'est que si tu pars de rien sinon ce wiki, et sous Windows, ça risque d'être quelques maux de tête d'ici à pouvoir faire des trucs comme tu l'entends.

Pour répondre au dernier message de Critor, je sais bien l'intérêt d'une telle réparation, cependant Gbl08ma ayant plus ou moins quitté le navire, et son programme étant assez retors à compiler (pour ma part je n'avais pas réussi la dernière fois que je m'y suis frotté, LePhénixNoir avait envisagé de s'y plonger récemment, on en avait un peu discuté, on verra ce que ça donne… Malheureusement, je doute d'avoir le temps de m'y repencher sérieusement d'ici au bac… :-/ ), ça n'est pas très facile à appréhender… vraiment désolé… ^^"

Voilà, désolé si je suis passé un peu vite, été trop peu clair ou que j'ai raté certains points, mais je suis par là si il y a d'autres points flous, même si ces temps-ci je ne garantis pas de pouvoir trouver beaucoup de temps tout de suite…

En tout cas, je pense qu'un tel projet est intéressant sur pas mal de points, comme le dit Critor ! :)
Je maintiens le portage d'Eigenmath pour les Casio monochromes, n'hésitez pas à y jeter un œil si ça vous intéresse ! :p
Avatar de l’utilisateur
NemhardyPremium
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 48%
 
Messages: 45
Inscription: 28 Déc 2014, 22:06
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: question sdk graph 90+e/ portage CAS

Message non lude parisse » 24 Mai 2018, 06:21

Bon, c'est peut-etre faisable mais ca necessiterait pas mal de travail.
Giac utilise les flux C++ mais une simple compatibilite au niveau source sans sortie reelle sur l'ecran ne pose pas de problemes (equivalent a une redirection vers /dev/null) sachant qu'il faudrait de toutes facons une UI specifique (et effectivement l'UI d'Eigenmath est un bon candidat de depart). Par contre, il y a absolument besoin d'une STL fonctionnelle, si possible une vraie STL (meme si j'ai encore du code prevu pour la uSTL qui pourrait etre actualise). Je n'ai jamais fait ca, mais il doit bien etre possible de faire ce qui a ete fait pour ndless sur TI, avec support de la libstdc++/STL dans le SDK?
Je ne comprends pas bien pourquoi il y a une telle limitation sur le tas, pourquoi ce partage si desequilibre avec la pile? A 130K, on est vraiment tres tres limite. Le portage le plus econome de giac que j'ai realise etait pour une architecture ayant 256K de RAM disponible (RAM totale, il y avait en realite plutot 200K utilisable une fois la stack enlevee).
Autre point important: quid de l'initialisation des variables dont la valeur est constante (segment rodata https://fr.wikipedia.org/wiki/Segment_de_donn%C3%A9es)? Si la flash est executable tout va bien, si ca se fait par copie en RAM, c'est cuit avec 130K (il y a 1500 commandes utilisateur environ, et chaque commande utilise plusieurs variables constantes).
[Edit] Bon je vois qu'en fait ce genre de variables est copiee dans la zone partagee avec la stack, donc ne devrait pas causer de soucis.
Un point que j'ai oublie: comment on teste? Est-ce uniquement par transfert sur la calculatrice physique ou y-a-t-il un emulateur?
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 78%
 
Messages: 3511
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: question sdk graph 90+e/ portage CAS

Message non lude Nemhardy » 24 Mai 2018, 13:01

À priori je ne vois pas pourquoi on ne pourrait pas s'approcher d'une STL utilisable, je ne sais pas exactement quel a été le processus pour y arriver sur ndless… Après, je ne suis pas très à l'aise avec les normes et formalisation du C++, donc peut être que je rate quelque chose ici…

Concernant l'organisation de la RAM disponible : ça relève là de ce qu'offre l'OS de la machine, on n'a pas vraiment le contrôle là dessus ; ça reste assez étonnant comme organisation… Mais comme je le disais, la stack est quand même utilisable, et typiquement une des optiques est d'utiliser des gros morceaux de stacks, dans lesquels on va gérer nous même l'allocation de blocs mémoire en apportant des fonctions `malloc`/`free` supplémentaires spécifiques au morceau de stack réservé (cf ce que j'évoquais plus haut par rapport à `memmgr` par exemple ^^), donc ces 500ko de stack restent exploitables. Et effectivement, les segments de constantes sont copiés dans cette zone au chargement du programme.

Pour le test des programmes, Casio a un émulateur qui est vraiment bien fidèle (surtout pour des programmes qui ne partent pas dans du trop bas niveau), Critor en a mis le lien dans sa première réponse au sujet.
Je maintiens le portage d'Eigenmath pour les Casio monochromes, n'hésitez pas à y jeter un œil si ça vous intéresse ! :p
Avatar de l’utilisateur
NemhardyPremium
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 48%
 
Messages: 45
Inscription: 28 Déc 2014, 22:06
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: question sdk graph 90+e/ portage CAS

Message non lude parisse » 24 Mai 2018, 17:57

Premiere tentative de compilation comme ndless en changeant target, echec de compilation de newlib (cible non supportee).
J'ai donc installe sh3eb-elf-gcc selon https://www.planet-casio.com/Fr/forums/topic12970-1-Tutoriel_Compiler_sous_Linux_avec_un_cross-compilateur_gcc.html, puis libfxcg, mais echec pour libstdc++-v3:
Code: Tout sélectionner
make all-target-libstdc++-v3

a la configuration, il teste "checking for shl-load" et stoppe sur l'erreur "Link tests are not allowed after GCC_NO_EXECUTABLES". Soit libstdc++-v3 n'est pas cross-compilable, soit la configuration initiale de gcc n'est pas la bonne
Code: Tout sélectionner
../gcc-7.3.0/configure --target=sh3eb-elf --prefix="$HOME/opt/sh3eb-elf" --disable-nls --enable-languages=c,c++ --without-headers

Quelqu'un a une idee? (Il faudrait peut-etre que je passe sur planete casio...)

P.S. pour la memoire: il me semble avoir lu par ailleurs que l'interpreteur Python pouvait allouer des quantites de RAM nettement superieures a 128k.
Avec malloc/free dans 128Ko et un custom malloc/free dans les 500Ko, je pourrais allouer une partie de la memoire dans l'un (par exemple les vector).
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 78%
 
Messages: 3511
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: question sdk graph 90+e/ portage CAS

Message non lude Adriweb » 24 Mai 2018, 18:09

Bon, c'est pas comme si j'avais la moindre connaissance spécifique sur Casio, mais pour le moment c'est relativement générique comme erreur, alors...

Ca me parait sacrément light, comme (options de) configure, ça.
Y'aurait potentiellement bien plus de --disable-* à mettre pour aller plus vite/petit/mieux.

En tout cas, ici et là, je vois que le log du configure pourrait contenir des infos utiles : https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48815#c8

Par ailleurs https://gcc.gnu.org/ml/gcc-help/2012-07/msg00018.html est probablement intéressant.

On est d'ailleurs bien d'accord que le make de la libstdc++ utilise bien la (cross-)toolchain buildée ?
Image

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
Avatar de l’utilisateur
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 80.2%
 
Messages: 14616
Images: 1218
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: question sdk graph 90+e/ portage CAS

Message non lude parisse » 24 Mai 2018, 18:36

Pour le moment je reessaie avec --disable-shared qui me semble correspondre au probleme. Ca prend evidemment du temps (recompilation de gcc...).
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 78%
 
Messages: 3511
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: question sdk graph 90+e/ portage CAS

Message non lude parisse » 24 Mai 2018, 20:00

Erreur inchangee, le config.log n'est pas plus parlant
Checking for shl_load
renvoie l'erreur Link tests are not allowed after GCC_NO_EXECUTABLES
Le script configure est un peu plus parlant, apparamment il essaie de linker un main() contenant shl_load()
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 78%
 
Messages: 3511
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: question sdk graph 90+e/ portage CAS

Message non lude Nemhardy » 24 Mai 2018, 20:17

Pour le coup je pense que tu peux aussi tenter de passer sur Planète Casio pour évoquer ça : je n'ai pas vraiment d'idée pour l'instant par rapport à ton erreur (je vais quand même chercher un peu), mais d'autres gens là bas sauront peut-être t'aiguiller, certaines personnes ont un peu plus touché à ce genre de chose il me semble, il y aura peut-être quelques idées.
Je maintiens le portage d'Eigenmath pour les Casio monochromes, n'hésitez pas à y jeter un œil si ça vous intéresse ! :p
Avatar de l’utilisateur
NemhardyPremium
Niveau 8: ER (Espèce Rare: nerd)
Niveau 8: ER (Espèce Rare: nerd)
Prochain niv.: 48%
 
Messages: 45
Inscription: 28 Déc 2014, 22:06
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: question sdk graph 90+e/ portage CAS

Message non lude parisse » 24 Mai 2018, 21:06

Apparamment c'est --disable-dlopen qu'il faudrait rajouter. Suite demain...
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 78%
 
Messages: 3511
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: question sdk graph 90+e/ portage CAS

Message non lude parisse » 26 Mai 2018, 17:19

Une question que j'aurais du poser des le debut: y-a-t-il une taille maximale pour les addins ?

Un petit point sur mes aventures avec le sdk casio:
J'ai renonce a compiler libstdc++-v3, meme en trafiquant le fichier configure pour lui faire passer les tests, il rale apres parce qu'il manque trop d'en-tetes de la libc standard. Je suis donc passe a la ustl (que j'avais un peu utilise pour la nspire avec la toolchain precedente de ndless). J'ai du y faire quelques ajouts pour compiler, notamment dans config.h de la ustl, pas forcement corrects (en particulier pour vsprintf, calloc, les modes O_RDONLY et O_WRONLY)
Code: Tout sélectionner
typedef unsigned off_t;
typedef unsigned size_t;
typedef size_t ssize_t;
typedef unsigned mode_t ;
#define vsprintf sprintf
#define rint(x) int(x+.5)
#define calloc(nmemb, size) malloc(size*nmemb)
#define strtoll strtol
#define strerror(n) "error"
#define EINTR            4      /* Interrupted system call */
#define   F_GETFL      3      /* get file status flags */
#define   F_SETFL      4      /* set file status flags */
#define O_ACCMODE           0003
#define O_RDONLY 00
#define O_WRONLY 2 // 01
#define O_RDWR 3 // 02
#define O_CREAT           0100        /* Not fcntl.  */
#define O_EXCL                   0200        /* Not fcntl.  */
#define O_NOCTTY           0400        /* Not fcntl.  */
#define O_TRUNC          01000        /* Not fcntl.  */
#define O_APPEND          02000
#define O_NONBLOCK          04000
#define O_NDELAY        O_NONBLOCK
#define O_SYNC               04010000
#define O_ASYNC         020000
#define __O_LARGEFILE        0100000
#define STDUNIX_HEADERS 1

J'ai du compiler ustl avec les exceptions activées, du coup je vais devoir compiler giac avec exceptions, ce qui va augmenter la taille du code, j'espere juste que ca ne rajoutera pas trop de code.
Apres ustl, j'ai compile sans problemes libtommath pour les entiers multi-precision.
Reste le plus long, compiler giac. J'en suis toujours au premier fichier sym2poly.cc, car il faut deja que tous les headers passent, ce qui necessite des modifs dans giac mais aussi dans la ustl, par exemple istream n'a pas de methode get, j'en ai bricole une avec read, et il va falloir ajouter une methode write pour des classes de giac pour compatibilite avec les stream de ustl. Mais il ne reste plus qu'une erreur de compilation sur ce fichier, donc avec du temps, ca devrait compiler.
Apres, il faudra linker, creer un addin et voir ce que ca donne sur l'emulateur. Auparavant, je pense que je vais me faire la main sur link/transfert/test d'un petit addin puis d'eigenmath (dont l'UI devrait me servir si tout se passe bien).
Avatar de l’utilisateur
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Prochain niv.: 78%
 
Messages: 3511
Inscription: 13 Déc 2013, 16:35
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

PrécédenteSuivante

Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 16 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
987 utilisateurs:
>945 invités
>37 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)