π
<-
Chat plein-écran
[^]

bug C incompréhensible

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

bug C incompréhensible

Unread postby 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: Select all
#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: Select all
{
            vx--;
            asm("nop");
        }

Mais ça n'a toujours AUCUN SENS
Je commence a penser de plus en plus que le backend llvm est buggé
User avatar
pwouik
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Level up: 20%
 
Posts: 12
Joined: 10 Sep 2018, 22:46
Gender: Not specified
Class: prepa mp

Re: bug C incompréhensible

Unread postby 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 calculator info!
MyCalcs
: Aidez la communauté à documenter les calculatrices en donnant des infos sur votre calculatrice ![/url]
Inspired-Lua.org
: All about TI-Nspire Lua programming
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 58.6%
 
Posts: 13591
Images: 1101
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Twitter: adriweb
GitHub: adriweb

Re: bug C incompréhensible

Unread postby 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 calculator info!
MyCalcs
: Aidez la communauté à documenter les calculatrices en donnant des infos sur votre calculatrice ![/url]
Inspired-Lua.org
: All about TI-Nspire Lua programming
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 58.6%
 
Posts: 13591
Images: 1101
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Twitter: adriweb
GitHub: adriweb

Re: bug C incompréhensible

Unread postby 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 :)
User avatar
pwouik
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Level up: 20%
 
Posts: 12
Joined: 10 Sep 2018, 22:46
Gender: Not specified
Class: prepa mp

Re: bug C incompréhensible

Unread postby 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 calculator info!
MyCalcs
: Aidez la communauté à documenter les calculatrices en donnant des infos sur votre calculatrice ![/url]
Inspired-Lua.org
: All about TI-Nspire Lua programming
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 58.6%
 
Posts: 13591
Images: 1101
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Twitter: adriweb
GitHub: adriweb

Re: bug C incompréhensible

Unread postby 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: Select all
#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
User avatar
pwouik
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Level up: 20%
 
Posts: 12
Joined: 10 Sep 2018, 22:46
Gender: Not specified
Class: prepa mp

Re: bug C incompréhensible

Unread postby 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 calculator info!
MyCalcs
: Aidez la communauté à documenter les calculatrices en donnant des infos sur votre calculatrice ![/url]
Inspired-Lua.org
: All about TI-Nspire Lua programming
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 58.6%
 
Posts: 13591
Images: 1101
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Twitter: adriweb
GitHub: adriweb

Re: bug C incompréhensible

Unread postby 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: Select all
#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 calculator info!
MyCalcs
: Aidez la communauté à documenter les calculatrices en donnant des infos sur votre calculatrice ![/url]
Inspired-Lua.org
: All about TI-Nspire Lua programming
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 58.6%
 
Posts: 13591
Images: 1101
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Twitter: adriweb
GitHub: adriweb

Re: bug C incompréhensible

Unread postby pwouik » 30 Mar 2020, 11:05

Ok,merci!
User avatar
pwouik
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Level up: 20%
 
Posts: 12
Joined: 10 Sep 2018, 22:46
Gender: Not specified
Class: prepa mp

Re: bug C incompréhensible

Unread postby Adriweb » 03 Apr 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 calculator info!
MyCalcs
: Aidez la communauté à documenter les calculatrices en donnant des infos sur votre calculatrice ![/url]
Inspired-Lua.org
: All about TI-Nspire Lua programming
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 58.6%
 
Posts: 13591
Images: 1101
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Twitter: adriweb
GitHub: adriweb


Return to Langages alternatifs

Who is online

Users browsing this forum: No registered users and 1 guest

-
Search
-
Social
-
Featured topics
Concours de rentrée 2021 - La Geste d'Alrys
Concours de rentrée 2021 - Synchro-donjon !
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Remplace ton ancienne fx-92 Collège ou Graph 35 par la nouvelle Graph 35+E II programmable en Python ! Pour tout achat d'une nouvelle Graph 35 d'ici le 30 septembre 2021, Casio te rembourse 10€. En cas de retour de ta fx-92 Collège c'est 18€, et même ou 23€ si tu retournes ton ancienne Graph 35. Etiquette de retour fournie, pas de frais de port à payer, même les anciens modèles et machines non fonctionnelles sont acceptées. En partenariat avec les Restos du cœur.
Remplace ton ancienne fx-92 Collège ou Graph 35 par la Graph 90+E couleur. Pour tout achat, Casio te rembourse 10€ en cas de retour de ta fx-92 Collège, ou 15€ en cas de retour de ta Graph 35. Etiquette de retour fournie, pas de frais de port à payer, même les anciens modèles et machines non fonctionnelles sont acceptées. En partenariat avec les Restos du coeur.
10€ remboursés par Casio sur l'achat de ta calculatrice Graph 35 d'ici le 30 Septembre 2021
Reprise de ton ancienne fx-92 Collège à 5€ ou Graph 35 à 10€. Même non fonctionnelle ou ancien modèle. Etiquette de retour fournie, pas de frais de port à payer. En partenariat avec les Restos du coeur.
25€ remboursés par Casio sur l'achat de ta calculatrice fx-CP400 d'ici le 31 Octobre 2021
3€ remboursés par Casio sur l'achat de ta calculatrice fx-92 Collège d'ici le 30 Septembre 2021
Casio Graph 90+E ou Graph 35+E II avec couvercle personnalisé à gagner sur simple participation aux formations Casio de Septembre 2021.
Liseuse numérique + Graph 90+E avec coque perso à gagner en répondant d'ici le 4 Octobre 2021 à la question : "Qu'est-ce que l'indice de cétane ?"
Coque NumWorks édition limitée Septembre 2021 à gagner.
123456789101112
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
492 utilisateurs:
>479 invités
>7 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)

-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)