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 - Autres questions


Index du Forum » Autres questions » Crash au lancement de l'add-in sans probleme à la compilation.
Yannis300307 Hors ligne Membre Points: 276 Défis: 0 Message

Crash au lancement de l'add-in sans probleme à la compilation.

Posté le 23/04/2023 15:49

Bonjour,
j'essaye depuis un moment de recréer Minecraft sur graph 90 + e.

Mon renderer 3D fonctionne mais pour l'optimiser j'ai remplacé les float par des "nombres à virgule fixés".

Mais après avoir tout implémenté et compilé sans erreur, je le transfert et l'add -in crash avec un message d'erreur que je ne comprend pas. J'ai l'impression que l'erreur ne vient pas vraiment d'un endroit précis du code car en commentant et décommentant certaines parties, cela marche certaines fois ...

Voici le dépôt git (Mal fait mais bon ...) : https://git.tipragot.fr/yannis/graphcraft
Les dernières modifications sont dans la branche "optimisations".

Message d'erreur
Cliquer pour enrouler



Merci


1, 2 Suivante
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 23/04/2023 15:59 | #


Je n'ai pas le temps de regarder dans l'immédiat, mais voici quelques éléments :

* Avec -Wl,-Map=map dans les flags de link tu peux savoir dans quelle fonction le crashe se situe (en cherchant PC = 0x304002)
* Vérifie les divisions par zéro et les endroits où tu convertis une valeur numérique en entier pour accéder à un tableau
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Yannis300307 Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 23/04/2023 16:02 | #


Merci pour le conseil je vais vérifier ça
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 !
Yannis300307 Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 23/04/2023 17:57 | #


Lephenixnoir a écrit :
* Avec -Wl,-Map=map dans les flags de link tu peux savoir dans quelle fonction le crashe se situe (en cherchant PC = 0x304002)


Il faut utiliser fxlink ?
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 !
Slyvtt Hors ligne Maître du Puzzle Points: 2309 Défis: 17 Message

Citer : Posté le 23/04/2023 18:06 | #


Non dans ton CMakeLists.txt

il faut mettre un truc du genre:


add_executable(graphcraft ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}})
target_compile_options(graphcraft PRIVATE -Wall -Wextra -Os -std=c++20)
target_link_options(graphcraft PRIVATE -Wl,-Map=Build_Addin.map -Wl,--print-memory-usage)
target_link_libraries(graphcraft Gint::Gint -lstdc++)


et tu verras les infos dans un fichier Build_Addin.map dans le répertoire build-cg
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Yannis300307 Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 23/04/2023 19:19 | #


Je ne trouve pas le PC dans le Build_Addin.map ...

Est ce que l'erreur pourrait venir d'un problème de type ou d'un dépassement de ram ?
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 !
Potter360 Hors ligne Rédacteur Points: 1221 Défis: 2 Message

Citer : Posté le 23/04/2023 19:29 | #


Il faut chercher le PC le plus proche à l'inférieur (je sais pas si je suis clair ahah)
Globalement, coder. Mal, mais coder.
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 24/04/2023 09:44 | #


Yannis300307 a écrit :
Je ne trouve pas le PC dans le Build_Addin.map ...

Le fichier map ne cite que les adresses de débuts de fonction. Il faut donc chercher (comme l'explique Potter) la fonction qui commence "juste avant" PC. Par exemple, dans cet extrait

  .text          0x0000000000308014      0xf7c CMakeFiles/gintctl.dir/src/gint/usbtrace.c.obj
                 0x0000000000308724                _gintctl_gint_usbtrace
  .text          0x0000000000308f90      0x340 CMakeFiles/gintctl.dir/src/libs/bfile.c.obj
                 0x0000000000308f90                _explore_folder
                 0x0000000000309100                _gintctl_libs_bfile

Un crash avec PC = 308fb2 serait dans la fonction explore_folder.

Note que les adresses en question changent chaque fois que tu modifies le code et recompiles donc il est important de produire le bug et regarder immédiatement. Si tu modifies des choses avant de regarder tu risques de tomber sur une autre fonction, ce qui serait très rageant...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Yannis300307 Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 24/04/2023 10:18 | #


J'ai retiré le Bruit de Perlin et ça se lance. Bon, il n'y a plus de rendu pour une raison que j'ignore mais au moins ça se lance .
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 !
Yannis300307 Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 24/04/2023 11:10 | #


Bon, j'ai fix (je pense) les blocs que ne sont pas chargés mais je crash quand il fait le rendu avec la fonction tangente.

avec le code 001042b6

                0x00000000003041a8                __Z5sinfp10FixedPoint
                0x00000000003041f0                __Z5cosfp10FixedPoint
                0x0000000000304238                __Z5tanfp10FixedPoint
.text           0x0000000000304280      0x424 /root/.local/share/fxsdk/sysroot/lib/gcc/sh3eb-elf/11.1.0/libgcc.a(_div_table.o)
                0x0000000000304280                ___udivsi3_i4i
                0x0000000000304350                ___sdivsi3_i4i


et voici ma fonction :
FixedPoint tanfp(const FixedPoint a)
{
    return FixedPoint::from_float(tanf(a.get_float_converted()));
}


Je ne comprend vraiment pas pourquoi il y a tant de problèmes avec mon FixedPoint ...

EDIT : le code complet est sur le git du premier message
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: 24232 Défis: 170 Message

Citer : Posté le 24/04/2023 11:18 | #


Est-ce que ce serait pas juste le tanf qui plante ? Il est possible qu'en passant au point fixe tu aies affecté la précision et/ou le résultat d'un calcul et que tu du coup tu appelles tanf() sur une entrée où elle n'est pas définie. N'oublie pas que c'est des fonctions qui sont capricieuses tout ça, c'est à toi de vérifier que tu donnes pas n'importe quoi comme entrée.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Yannis300307 Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 24/04/2023 11:37 | #


Il faudrait un moyen de log get_float_converted() ...
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 !
Yannis300307 Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 24/04/2023 12:04 | #


Je ne pense pas que cela vienne de la fonction tanf() car en la retirant et en la remplacent par juste 1.0f, j'ai toujours le crash au même endroit ...


FixedPoint tanfp(const FixedPoint a)
{
    return FixedPoint::from_float(1.0f);
}

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: 24232 Défis: 170 Message

Citer : Posté le 24/04/2023 13:05 | #


J'ai fait un test rapide en clonant le dépôt sur la branche optimisations. Moi j'ai un PC très différent (8c203492) qui n'est pas dans la ROM, donc j'ai pas essayé de chercher quelle fonction c'était, j'ai juste fait une recherche binaire à coup de commentaires.

Et je me retrouve sur

        // You normally need to normalise a normal!
        normal = Vector_Normalise(normal);

Tu as au moins une face dont le vecteur normal est nul.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Yannis300307 Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 24/04/2023 17:03 | #


J'ai rentré manuellement les triangles et j'ai toujours la même erreur à peu prés au même endroit ... Ca vient peut-être d'un calcul mal fait dans ma struct FixedPoint ?
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 !
Yannis300307 Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 24/04/2023 18:32 | #


Je ne comprend pas parce que le code suivant affiche bien 2 et 3. (j'ai mis " "%d", (int)test2.get_float_converted() " car je ne sais pas comment afficher le float)

FixedPoint test1 = FixedPoint::from_int(2);
FixedPoint test2 = FixedPoint::from_float(3.1f);

dprint(1, 15, C_BLACK, "%d", test1.get_int_converted());
dprint(1, 30, C_BLACK, "%d", (int)test2.get_float_converted());
dupdate();

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: 24232 Défis: 170 Message

Citer : Posté le 24/04/2023 19:04 | #


Ta fonction FixedPoint::from_float() n'a clairement pas de souci, regarde ailleurs. Si les normales sont supposées être non nulles retrace le calcule en affichant les valeurs au fur et à mesure. Tu peux utiliser %f si tu l'actives explicitement :

#include <fxlibc/printf.h>

int main() {
    __printf_enable_fp();
    /* ... */
}

C'est désactivé par défaut parce que ça prend pas mal de place.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Yannis300307 Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 25/04/2023 09:41 | #


J'ai rajouté un code pour écrire les valeurs de normal et dés la première itération de la boucle, j'obtiens 0.0 partout ... Ça veut donc dire que mon vecteur "normal" est nul et que Vector_Normalise() qui fait une division par la longueur du vecteur fait une division par zéro. Il ne reste plus qu'à trouver pourquoi on a ce vecteur nul ...

Ce que j'ai ajouté
Cliquer pour enrouler

// Take cross product of lines to get normal to triangle surface
normal = Vector_CrossProduct(line1, line2);

dclear(C_WHITE);                                              // TODO: remove
dprint(1, 1, C_BLACK, "%f", normal.x.get_float_converted());  // TODO: remove
dprint(1, 15, C_BLACK, "%f", normal.y.get_float_converted()); // TODO: remove
dprint(1, 30, C_BLACK, "%f", normal.z.get_float_converted()); // TODO: remove
dupdate();                                                    // TODO: remove
getkey();                                                     // TODO: remove

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 !
Slyvtt Hors ligne Maître du Puzzle Points: 2309 Défis: 17 Message

Citer : Posté le 25/04/2023 11:24 | #


Sauf erreur de calcul, un vecteur normal nul signifie :
- soit que tu calcules le produit de deux vecteurs colinéaires (tu n'aurais pas pris par exemple deux fois le même vecteur ?)
- soit que l'un des vecteurs (ou les deux) est (sont) nul(s) (tu n'aurais pas pris deux fois le même point pour définir un des vecteurs ?)

ce ne sont bien entendu que des pistes.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Yannis300307 Hors ligne Membre Points: 276 Défis: 0 Message

Citer : Posté le 25/04/2023 11:33 | #


J'ai remonté les erreurs jusqu'à tomber sur l’opérateur multiplication. Je me suis renseigné et effectivement il y a une erreur dans mon code de multiplication. J'imagine aussi qu'il doit y avoir un problème avec la division.
Code qui ne marche pas
Cliquer pour enrouler

FixedPoint operator*(const FixedPoint &a, const FixedPoint &b)
{
    return FixedPoint(a.value * b.value);
}

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 !
Slyvtt Hors ligne Maître du Puzzle Points: 2309 Défis: 17 Message

Citer : Posté le 25/04/2023 12:02 | #


Ah oui attention.

Typiquement tu passes d'une valeur vers sa correspondance en fixed point (FP) en effectuant une multiplication par un multiple de puissance de 2.

par exemple si tu es en FP32 bits et que tu multiplies tout par 2^16 (65536) pour avoir du FP16.16 (c'est le classique).

alors quand tu multiplies deux FP32 ensemble, il faut faire gaffe à 2 choses :
1/ ca peut déborder donc logiquement on passe par un 64bits pour stocker la multiplication
2/ il faut pas oublier de diviser le résultat par 2^16 car sinon ton résultat est faux (car a ET b on été multipliés tous les deux auparavant)

a * b transformé en FP donne (a * b * 65536)
FP(a) * FP(a) transformé en a*65563 * b*65536 --> d'ou le besoin de diviser une fois par 65536

je sais pas si je suis clair

pour la division, idem, mais cette fois faut multiplier (en réalité il faut commencer par multiplier avant de diviser sinon tu perds la précision)
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
1, 2 Suivante

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 72 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