Page 1 of 1

Stocker une grande quantité de texte

PostPosted: 22 May 2019, 14:17
by GrandTouque
Bonjour,

Je souhaite réaliser un dictionnaire français/allemand sur la TI 83 PCE et pour cela, je dois stocker un peu moins de 2 Mo de texte. Pour créer mon programme j'utilise la toolchain (car en Basic le programme serait trop lent et il serait impossible de stocker tout le texte dans les 10 variables Chr).
Mon problème est que compilateur refuse de remplir un tableau de pointeurs (comme le "Hello World" dans l'exemple du Project Builder) avec plus de 4098 caractères ASCII :
Code: Select all
make: *** [obj/main.src] Error -1
.
Et même si j'en crée plusieurs de taille inférieur, cela fait reset la calculatrice :
Code: Select all
[CEmu] NMI reset caused by writing to the stack limit at address 0xd19881. Hint: Probably a stack overflow (aka too much recursion).
et ce, même si le compilateur aura crée des fichiers APPVAR.8xv :( .

Dois-je modifier une adresse qui désignerait une taille maximum dans le .makefile ?
Ou alors existe-t-il une méthode fiable pour stocker une grande quantité de texte :help:

Re: Stocker une grande quantité de texte

PostPosted: 22 May 2019, 16:33
by Ti64CLi++
Tu devrais pouvoir stocker de grandes quantités de texte dans des appvars, même s'il me semble qu'il y a une limite de 65535 Bytes ;)

Re: Stocker une grande quantité de texte

PostPosted: 22 May 2019, 17:47
by Adriweb
Il ne faut pas créer de variables sur la stack (a l'intérieur d'une fonction) supérieures à 4 KB vu que c'est la taille max de la stack. (et par ailleurs, le heap fait 69 KB, donc attention à vos malloc aussi).
Donc stocke tes grosses variables en static (et const, d'ailleurs, dans ton cas), déjà.

Il n'y a pas de makefile (linker file, tu voulais dire, d'ailleurs, bref) à modifier, c'est l'OS qui fonctionne comme ca.

Note: Basic ou ASM, les programmes sont limités à 65535 octets.
Le mieux reste de stocker des choses dans des appvars puis d'en lire le contenu à la demande (ne pas tout charger d'un coup, car la RAM n'est pas très grosse non plus...)
La limite de taille des appvars est de 65512 octets.

Re: Stocker une grande quantité de texte

PostPosted: 23 May 2019, 15:31
by GrandTouque
Merci de vos réponses,

Cependant, lorsque j'essaye de lire une AppVar contenant du texte avec
Code: Select all
ti_var_t lex = ti_OpenVar("DICO1", "r", TI_APPVAR_TYPE);
, la valeur renvoyé est toujours 0, quelle que soit la taille de l'AppVar et que son nom passé en premier paramètre lui corresponde ou non.
Devrais-je utiliser une autre fonction de fileioc qui renvoie un char* pour accéder à son contenu ?

Re: Stocker une grande quantité de texte

PostPosted: 23 May 2019, 18:24
by Adriweb
Est-ce que tu as appelé ti_CloseAll(); dans ton main, avant d'utiliser des fonctions relatives aux variables/fichiers ?

Re: Stocker une grande quantité de texte

PostPosted: 10 Jun 2019, 18:23
by GrandTouque
Non, c'était bien ça qui clochait, merci :p

Maintenant que j'ai finis mon programme, est-ce que vous pensez que c'est utile que je publie ici un outil pour créer d'autres dictionnaires (pour les euro-qqc avec une DNL maths par exemple) ?