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 » mon add-in fais redémarrer mal graph35+E II
Pedrobzh Hors ligne Membre Points: 616 Défis: 0 Message

mon add-in fais redémarrer mal graph35+E II

Posté le 27/10/2020 17:17

bonjour j'ai suivit le tuto de Lephenixnoir et j'ai commencé a faire l'animation de mon personnage
ais quand je le lance sur ma calculatrice elle redémarre

j'ai déjà eut ce problème ce matin mais j'ai bien regardé et j'avais trouvé le problème...

or la je le trouve pas...

#include <gint/display.h>
#include <gint/keyboard.h>

struct player
{
    /* Position in map */
    int x, y;
    /* Direction currently facing */
    int dir;
    /* Animation and frame */
    int twait;
    int frame;
};


int main(void)
{
    struct player mplayer;
    mplayer.twait = 10;
    mplayer.frame = 0;
    extern bopti_image_t img_logo;
    extern bopti_image_t img_player;
    while(1==1){
        dclear(C_WHITE);
        dimage(0, 2, &img_logo);
        dsubimage(40, 40,&img_player, mplayer.frame * 11, 0, 11, 11, DIMAGE_NONE);
        dupdate();

        //getkey();
        mplayer.twait = mplayer.twait - 1;
        if(mplayer.frame < 5 && mplayer.twait == 0){
            mplayer.frame = mplayer.frame + 1;
        }
        if (mplayer.frame >= 5){
            mplayer.frame = 0;
        }
        if(mplayer.twait == 0){
            mplayer.twait = 10;
        }
    }
    return 1;
}



Lephenixnoir Hors ligne Administrateur Points: 20809 Défis: 143 Message

Citer : Posté le 27/10/2020 17:32 | #


Semble remonter à 1c7b135.
Pedrobzh Hors ligne Membre Points: 616 Défis: 0 Message

Citer : Posté le 27/10/2020 17:45 | #


je connais git et je sans que c'est un commit,
mais je vois pas ou tu veux en venir
pensés suicidaires
   90%
Lephenixnoir Hors ligne Administrateur Points: 20809 Défis: 143 Message

Citer : Posté le 27/10/2020 17:49 | #


C'est pour moi. J'ai fait un bisect et le bug a été introduit par ce commit. Donc maintenant je vais voir ce qui a pu changer à ce moment-là.
Pedrobzh Hors ligne Membre Points: 616 Défis: 0 Message

Citer : Posté le 27/10/2020 17:51 | #


ok mais je porrais pas continuer mon projet

mais c'est la graph 35+E II le problème ?

Ajouté le 27/10/2020 à 17:52 :
je présice mais le bug est apparut quand j'ai mis les twaits
pensés suicidaires
   90%
Lephenixnoir Hors ligne Administrateur Points: 20809 Défis: 143 Message

Citer : Posté le 28/10/2020 10:12 | #


En effet tant que le bug existe il bloque ton code. Mais rassure-toi, d'une part ça ne se joue pas à grand-chose, d'autre part j'essaie de réagir vite justement pour pas vous bloquer.

J'ai soudainement trouvé le problème après être allé dormir hier. C'est pas quand twaits est apparu mais quand getkey() a disparu que le bug s'est produit. Et ce n'est pas immédiat, si tu fais très attention et que tu lances l'add-in en ne touchant le clavier qu'une fraction de seconde tu peux voir que l'add-in marche jusqu'à ce que tu appuies sur une touche, et là ça crashe.

Mais prenons les choses dans l'ordre, j'ai poussé un correctif sur la branche dev qui résout le crash. Pour l'installer :
• Tire la branche dev de gint (git checkout dev) (a priori tu es déjà dessus)
• Réinstalle gint (make install)
• Relinke ton add-in (make -B)

En fait ce que le commit coupable fait c'est qu'il sépare le driver du contrôleur d'interruptions (INTC) du noyau. Ça veut dire que le noyau de gint et le code qui initialise les interruptions (notamment ne désactivant celles que gint ne gère pas) sont dans des fichiers différents.

A priori pas de problème, sauf que le noyau ne fait pas l'initialisation de l'INTC explicitement, il initialise juste tous les drivers qui sont dans une table remplie par le linker selon ce dont tu as besoin. Par exemple si tu utilises les timers mais pas la RTC, la table listera le driver timer mais pas le driver RTC, et gint n'initialisera pas la RTC. Le linker ne liste vraiment que les drivers que tu utilises.

Sauf que voilà, si ton code n'utilise pas le driver INTC alors il ne sera pas inclus. Mais contrairement aux autres le driver INTC *doit* être inclus pour que gint marche (sinon l'interruption clavier vient faire crasher l'add-in), il n'est pas dispensable. Comme toutes les fonctions du clavier utilisent les timers qui utilisent l'INTC, il suffit d'appeler getkey() ou une autre fonction clavier pour que le driver INTC soit là et que le bug n'apparaisse pas. C'est pour ça que je ne l'avais pas remarqué.

Par contre dès que ton code ne fait vraiment plus rien, le driver n'est plus inclus et l'application crashe. Voilà voilà pour cette petite histoire. Le correctif ne fait qu'ajouter une dépendance factice de kernel/kernel.c au driver de l'INTC.
Pedrobzh Hors ligne Membre Points: 616 Défis: 0 Message

Citer : Posté le 28/10/2020 11:07 | # | Fichier joint


ok, merci
pendant que j'étais bloqué j'ai commencé le menu et les ressources
pensés suicidaires
   90%
Lephenixnoir Hors ligne Administrateur Points: 20809 Défis: 143 Message

Citer : Posté le 28/10/2020 11:54 | #


Mais euh pourquoi tu postes tout ça ? Tu lâches des images comme ça, y'a aucune explication dans tes messages, aucune majuscule, aucune ponctuation, et ça sert à rien. Si y'avais pas un cadre (ce topic) pour justifier qu'il y a peut-être une raison valide, tous ces messages auraient été supprimés pour spam depuis un bon moment. x)

Voilà quelques conseils de plus, et par « conseils » j'entends ce forum (moi y compris) va t'ignorer ou supprimer chaque fois que tu postes en les ignorant :
• Majuscules et ponctuations. Y'a des correcteurs grammaticaux partout, c'est pas négociable.
• Ne double-poste jamais sauf si tu as des nouvelles informations conséquentes ou une grosse rectification à faire sur un message précédent.
• Ne pose pas de questions si tu n'accompagnes pas tes questions de preuves concrètes que tu as cherché avant ce que tu pouvais faire.
• Ne poste pas un message avant d'avoir bien vérifié que tu avais tout dit (pour pas double-post 10 secondes après).
• Et on n'apprécie pas les GIFs flashy en avatar.

Je t'ai défendu précédemment mais ma patience aussi a des limites, donc fais des efforts de ton côté ou on arrêtera d'en faire du nôtre.

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