π
<-
Chat plein-écran
[^]

bug C incompréhensible

Assembleur, Axe, C/C++, ICE...

bug C incompréhensible

Message non lude pwouik » 26 Mar 2020, 18:11

je viens de me mettre au C pour ti83ce mais je suis tombé sur un bug complétement incompréhensible
le carré doit pouvoir bouger dans deux directions et s’arrêter mais au lieu de ça quand il commence a aller a droite il accélère sans s'arreter.
Code: Tout sélectionner
#include <tice.h>
#include <string.h>
#include <graphx.h>
#include <keypadc.h>
int main(void)
{
    /* Clear the homescreen */
    os_ClrHome();
    gfx_Begin();
    uint24_t ticks=0;
    int16_t x=15,y=15,i,j,vx=0,vy=0;
    uint8_t map[12][15];
    for(i=0;i<8;i++)
    for(j=0;j<13;j++)
        if(randInt(0,1)==0)
           map[i][j]=1;
    while (!(kb_Data[7] & kb_Down))
    {
        delay(20);

        if (kb_Data[7] & kb_Right)vx=5;
        if (kb_Data[7] & kb_Left)vx=-5;
        x+=vx;
        y+=vy;
        if(vx>0)
        {
            vx--;
        }
        if(vx<0)
        {
            vx++;
        }
        gfx_FillScreen(255);
        gfx_SetColor(37);
        for(i=0;i<12;i++)
        for(j=0;j<15;j++)
            if(map[i][j]==1)
                gfx_FillRectangle_NoClip(j*20,i*20,20,20);
        ticks++;
        gfx_SetColor(0);
        gfx_FillRectangle(x,y,20,20);
        gfx_SwapDraw();
    }
    gfx_End();
    return 0;
}

EDIT:
mettre ça fixe le pb
Code: Tout sélectionner
{
            vx--;
            asm("nop");
        }

Mais ça n'a toujours AUCUN SENS
Je commence a penser de plus en plus que le backend llvm est buggé
Avatar de l’utilisateur
pwouik
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Prochain niv.: 20%
 
Messages: 12
Inscription: 10 Sep 2018, 22:46
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: prepa mp

Re: bug C incompréhensible

Message non lude Adriweb » 27 Mar 2020, 00:08

Euh ben le backend LLVM évolue de jour en jour, donc oui, c'est tout a fait possible qu'il y ait des bugs qui subsistent (meme s'il y en a de moins en moins, tout de meme).

Je vais regarder le code et tester, pour voir.
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%
 
Messages: 14599
Images: 1216
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: bug C incompréhensible

Message non lude Adriweb » 27 Mar 2020, 00:19

Oui il semblerait que ça buggue du côté compileur sur au moins des comparaisons, jacobly étant au milieu de tentatives d'optimisations... Et certaines gestions de comparaisons sont à priori cassées.
Et j'update le PB assez souvent pour suivre les évolutions, là on a pas eu de pot vu que c'est tombé sur un truc cassé qui n'a pas été chopé par les tests.

Je te proposerais bien de mettre "-O0" dans les options de compilations (au lieu de -O3) par défaut mais même si du coup ca fait fonctionner la flèche droite, c'est la gauche qui déconne :troll:
Je confirme qu'avec un asm("nop") ca va mieux (en tout cas en -O3).

Bref, je vais voir si je peux rollback quelque peu mais sinon jacobly devrait être capable de s'occuper de ceci prochainement.

Merci pour ton bug report... et ta patience ^^
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%
 
Messages: 14599
Images: 1216
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: bug C incompréhensible

Message non lude pwouik » 27 Mar 2020, 10:24

Merci pour ton message
je suis heureux que ça bouge toujours du coté de ce backend
Bon courage a vous :)
Avatar de l’utilisateur
pwouik
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Prochain niv.: 20%
 
Messages: 12
Inscription: 10 Sep 2018, 22:46
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: prepa mp

Re: bug C incompréhensible

Message non lude Adriweb » 28 Mar 2020, 02:38

Oui, ca bouge presque tous les jours en ce moment :)
En tout cas, il a pu corriger des problèmes (selon le niveau d'opti), et je garde le PB à jour :) Bref, le bug que tu rencontres est apparemment corrigé, je te laisse vérifier de ton côté !
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%
 
Messages: 14599
Images: 1216
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: bug C incompréhensible

Message non lude pwouik » 28 Mar 2020, 17:20

Tout marche,parfait!
edit:au passage ça m'arrive souvent de bloquer l’émulateur par inadvertance, par exemple en testant un programme quand un autre tourne et peut etre inclure les clibs directement au lieu de devoir les remettre

EDIT 2:
HAAAAAAAA,ça refais n’importe quoi!
par exemple la ligne 45 s'execute alors qu'elle ne devrais jamais s'executer(pour le moment en tout cas)
Code: Tout sélectionner
#include <tice.h>
#include <string.h>
#include <graphx.h>
#include <keypadc.h>
int main(void)
{
    /* Clear the homescreen */
    os_ClrHome();
    gfx_Begin();
    uint24_t ticks=0;
    int16_t x=15,y=15,i,j,vx=0,vy=0;
    uint8_t map[12][15];
    for(i=0;i<15;i++)
    for(j=0;j<20;j++)
        if(randInt(0,4)==0)
           map[i][j]=1;
    while (!(kb_Data[7] & kb_Down))
    {
        delay(20);

        if (kb_Data[7] & kb_Right)vx=5;
        if (kb_Data[7] & kb_Left)vx=-5;
        gfx_FillScreen(255);
        if(vx>0)
        {
            vx--;
        }
        if(vx<0)
        {
            vx++;
        }
        vy++;
        for(i=0;i<15;i++)
        for(j=0;j<20;j++)
            if(map[i][j]==1)
                gfx_FillRectangle_NoClip(j*16,i*16,16,16);
        ticks++;
        x+=vx;
        y+=vy;
        if(vy<0)
            if(map[y/16][x/16]==1 || map[y/16][x/16]==1)
            {
                vy=0;
                y=0;//(y/16)*16;
                x+=5;//comme indicateur
            }
        if(vy>0)
            if(map[(y+8)/16][x/16]==1 || map[(y+8)/16][x/16]==1)
            {
                vy=0;
                y=0;//((y+8)/16)*16-8;
            }
        gfx_SetColor(0);
        gfx_FillRectangle(x,y,8,8);
        gfx_SwapDraw();
    }
    gfx_End();
    return 0;
}


Et me gratifie au passage d'un error duplicate a chaque fois
Avatar de l’utilisateur
pwouik
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Prochain niv.: 20%
 
Messages: 12
Inscription: 10 Sep 2018, 22:46
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: prepa mp

Re: bug C incompréhensible

Message non lude Adriweb » 29 Mar 2020, 20:32

1. Pour les clibs, oui j'ai en tête de prévoir quelque chose pour les transférer directement. En attendant tu peux te faire une ROM qui les contient deja :P
Par contre, pour les blocages, c'est à dire ? Parce que l'émulateur se met en pause quand il n'est pas utilisé, mais il suffit d'appuyer sur le bouton Resume, non ?

2. Je vais voir le problème avec jacobly :P
(Edit: avec "-Oz" ça fonctionne bien. Donc ca doit etre un bug des optimisations en -O3 qui provoque ça. Tu peux changer ce setting dans le PB dans ton projet, dans la sidebar)
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%
 
Messages: 14599
Images: 1216
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: bug C incompréhensible

Message non lude Adriweb » 29 Mar 2020, 22:59

Bon alors il reste encore un bug par rapport a ça du côté du backend, mais il y avait quand même plusieurs problèmes dans ton code, dont voici une version corrigée:

Code: Tout sélectionner
#include <tice.h>
#include <string.h>
#include <graphx.h>
#include <keypadc.h>

#define MAP_W 15
#define MAP_H 12

int main(void)
{
    /* Clear the homescreen */
    os_ClrHome();
    gfx_Begin();

    uint24_t ticks=0;
    int16_t x=15,y=15,i,j,vx=0,vy=0;
    uint8_t map[MAP_H][MAP_W] = {0};

    for(i=0; i<MAP_H; i++)
        for(j=0; j<MAP_W; j++)
            if(randInt(0,4)==0)
                map[i][j]=1;

    while (!(kb_Data[7] & kb_Down))
    {
        delay(20);

        if (kb_Data[7] & kb_Right) vx=5;
        if (kb_Data[7] & kb_Left)  vx=-5;
        gfx_FillScreen(255);
        if(vx>0)
        {
            vx--;
        }
        if(vx<0)
        {
            vx++;
        }
        vy++;

        for(i=0; i<MAP_H; i++)
            for(j=0; j<MAP_W; j++)
                if(map[i][j]==1)
                    gfx_FillRectangle_NoClip(j*16,i*16,16,16);

        ticks++;
        x+=vx;
        y+=vy;
        if(vy<0)
        {
            if(map[y/16][x/16]==1 || map[y/16][x/16]==1)
            {
                vy=0;
                y=0;//(y/16)*16;
                x+=5;//comme indicateur
            }
        }
        if(vy>0)
        {
            if(map[(y+8)/16][x/16]==1 || map[(y+8)/16][x/16]==1)
            {
                vy=0;
                y=0;//((y+8)/16)*16-8;
            }
        }

        gfx_SetColor(0);
        gfx_FillRectangle(x,y,8,8);
        gfx_SwapDraw();
    }

    gfx_End();
    return 0;
}


  • Utilisation de constantes pour les tailles de la map -> ca evite des erreurs/differences entre la déclaration et l'usage dans les boucles (provoquant des buffer overflow etc) ;)
  • La map était à moitié remplie de valeur aléatoire car tu n'initialisais pas la variable. J'ai rajouté = {0} qui permet de tout mettre à 0.

Par ailleurs, le stack est très petit sur CE, et en fait si jamais tu en demandes un peu trop, ça fait foirer des choses (ça dépend des optis, c'est en fait pour ca que ca fonctionne bien en Oz et pas en O3)
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%
 
Messages: 14599
Images: 1216
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb

Re: bug C incompréhensible

Message non lude pwouik » 30 Mar 2020, 11:05

Ok,merci!
Avatar de l’utilisateur
pwouik
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Prochain niv.: 20%
 
Messages: 12
Inscription: 10 Sep 2018, 22:46
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: prepa mp

Re: bug C incompréhensible

Message non lude Adriweb » 03 Avr 2020, 19:20

C'est corrigé côté LLVM (et PB) depuis hier :)
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%
 
Messages: 14599
Images: 1216
Inscription: 01 Juin 2007, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Twitter/X: adriweb
GitHub: adriweb


Retourner vers Langages alternatifs

Qui est en ligne

Utilisateurs parcourant ce forum: Google Adsense [Bot] et 7 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.
784 utilisateurs:
>774 invités
>5 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)