Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » 5 x 4 = 6912
Ninestars Hors ligne Membre Points: 2413 Défis: 22 Message

5 x 4 = 6912

Posté le 24/11/2021 22:25

Bonjour à tous,

Avec ce bon titre putaclic j'attire du monde afin de, je l'espère, trouver la raison de ce "bug".

J'ai du code qui tourne en boucle, sans timer (volontairement utilisé en tout cas) qui me renvoie, de façon assez aléatoire de calcul totalement aberrants.
Aléatoire dans le sens où , mon code tourne pendant x frames nickel, et puis d'un coup PAF ! j'ai une valeur aberrante qui surgit.
En isolant le code je suis arrivé à trouvé l'endroit du code exact

int w
int h
int nbw_tex

...

if ((w >> 3) + (h * nbw_tex) > 32*32)
{
    debug_pop("sup %i", (w >> 3) + (h * nbw_tex));
    debug_pop("sup %i %i %i", w, h, nbw_tex);
    debug_pop("sup %i", h * nbw_tex);
}

J'ai isolé la valeur aberrante avec un if, la valeur ne doit pas pouvoir dépasser 32x32 (taille d'une texture)
Or, le code me renvoie les valeurs suivantes :
>>>6912
>>>5 5 4
>>>6912
Autrement dit h * nbw_tex = 5*4 = 6912

J'obtiens aussi le pattern suivant
>>>425201761
>>>15 14 4
>>>425201760

On remarque que lorsque w>>3 = 0 j'ai des nombres autour de 6000 et quand w>>3 = 1 j'ai des nombres autour de 425201760.

Alors, soit j'ai pas les yeux en face des trous, soit le processeur est en carton

Vous auriez une idée ?


Inikiwi Hors ligne Membre Points: 194 Défis: 0 Message

Citer : Posté le 24/11/2021 22:29 | #


les << et >> manipule les bits d'une variable, je suis pas si c'est volontaire mais un un bit décalé ça multiplie par 2 ou divisse par 2 (pour un X << 1)

Ajouté le 24/11/2021 à 22:33 :
https://zestedesavoir.com/tutoriels/755/le-langage-c-1/notions-avancees/manipulation-des-bits/
Ninestars Hors ligne Membre Points: 2413 Défis: 22 Message

Citer : Posté le 24/11/2021 22:38 | #


Je suis au courant, c'est volontaire, c'est une optimisation de la division par 8
Inikiwi Hors ligne Membre Points: 194 Défis: 0 Message

Citer : Posté le 24/11/2021 22:42 | #


bah, la on dirait que tu as multiplié, sinon si c’est un float ça marchera pas, les valeurs sont codé différamment
Cakeisalie5 En ligne Membre de CreativeCalc Points: 1857 Défis: 10 Message

Citer : Posté le 25/11/2021 03:51 | #


J'ai essayé quelques manipulations binaires pour voir si j'arrivais à identifier un schéma et rien de mon côté. C'est pour quelle plateforme ? Est-ce que tu as tenté de lire l'assembleur généré par le compilateur pour voir si une instruction est pas utilisée incorrectement, ou tenté d'utiliser des unsigned voir si c'est pas le bit de signe qui fait des siennes ?

Promotion ordinaire sur les inscriptions sur Planète Casio : en ce moment, c'est gratuit !
Mon blogBesoin d'utilitaires de transfert vers et depuis la calculatrice sous GNU/Linux ?
Lephenixnoir En ligne Administrateur Points: 20999 Défis: 143 Message

Citer : Posté le 25/11/2021 06:52 | #


À tous les coups c'est une interruption qui modifie mach/macl... même si j'ai déjà corrigé un tel bug et je vois pas quelle interruption ferait une multiplication dans le coin.

Dans tous les cas ça doit bien être le même bug que celui que je suis en train de chasser... rien que le "après X frames PAF" est un énorme indice.
Ninestars Hors ligne Membre Points: 2413 Défis: 22 Message

Citer : Posté le 25/11/2021 13:53 | #


Très bien, si besoin je peux partager le code si ça peut permettre d'isoler plus facilement le bug

@Cake : j'ai pensé a du unsigned mais j'ai rien trouvé de ce côté là

@Lephé : dans ce cas, je fais comme si il n'y avait pas de bug en espérant une correction de ta part Lephé
Yatis En ligne Membre Points: 560 Défis: 0 Message

Citer : Posté le 25/11/2021 13:55 | #


Je sais d'où viens le problème Lephe, dans le fichier gint/src/kernel/inth.S, ligne 137, tu restaures mach puis macl alors que ça devrais être l'inverse (?)
Lephenixnoir En ligne Administrateur Points: 20999 Défis: 143 Message

Citer : Posté le 25/11/2021 14:02 | #


HA HA HA ! Elle est excellente celle-là. Beau coup d’œil de lynx Yatis, merci.
Ninestars Hors ligne Membre Points: 2413 Défis: 22 Message

Citer : Posté le 25/11/2021 16:36 | #


Super Yatis, j'ai fait la modif moi même de inth.S et je te confirme que je n'ai plus de bug

Tu me dois une soirée complète de debuggage Lephé Haha
Yatis En ligne Membre Points: 560 Défis: 0 Message

Citer : Posté le 25/11/2021 16:59 | #


Le bug est extrêmement fourbe à trouver hein ?

Heureusement que j'avais du toucher aux gestionnaires d'interruptions quand j'avais voulus ajouter les threads dans gint (à savoir que je risque d'en reparler dans les prochaines semaines) et que je me sois souvenue que MACL et MACH (les registres utilisés pour les multiplications) étaient utilisés là. C'est juste improbable en fait
Lephenixnoir En ligne Administrateur Points: 20999 Défis: 143 Message

Citer : Posté le 25/11/2021 17:04 | #


Et puis le truc quoi, je les ai mis dans le bon ordre sur SH4 mais pas sur SH3. Vraiment merci Yatis x)

Aussi y'a une probabilité non-nulle pour que ce soit aussi à l'origine de l'autre problème de crash Ninestars. Je te dis ce soir.
Totoyo Hors ligne Membre d'honneur Points: 16040 Défis: 102 Message
Ne0tux Hors ligne Membre d'honneur Points: 3493 Défis: 265 Message

Citer : Posté le 25/11/2021 22:28 | #


En même temps l'avatar de 9* est une éponge, c'est normal que ce soit lui qui essuie les plâtres !
Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Lephenixnoir En ligne Administrateur Points: 20999 Défis: 143 Message

Citer : Posté le 26/11/2021 06:41 | #


Passe sur une calto SH4 Ninestars, il reste plus que toi
Ninestars Hors ligne Membre Points: 2413 Défis: 22 Message

Citer : Posté le 26/11/2021 08:19 | #


Haha Neotux, elle est pas mal celle là
C’est prévu justement Lephé, je rachète à Neotux celle qu'il a tout fraîchement gagné
C’est que je l'aime ma SH3 de la seconde... c’est sentimental j'ai passé tellement d'heure dessus que j'ai pas envie de m'en séparé au premier nouveau processeur venu

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 v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 73 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