Programme a arrêté de fonctionner

Fermé
evilfalcon - 21 févr. 2014 à 11:06
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 22 févr. 2014 à 13:51
Bonjour tous le monde,

J'aurai besoin de votre aide, je suis complètement perdu par cette erreur. Je suis entrain de créer un programme de simulation d'un convoyeur, mon programme se compile, mais il arrête de fonctionner à partir de la fonction
gestion_avance_manuel_cv1
, quand je passe cette fonction en mode commentaire, je n'ai pas de problème, sinon j'ai un message d'erreur Windows qui bloque mon travail!

bon voila mon code:

#include <stdio.h>
#include <stdlib.h>

void Set_Memoire_Manchon_Fin_CV1(int in14,int int15, int *MEN_MANCHON_FIN_CV1, int *COMPT_PAS);
int Reset_Memoire_Manchon_Fin_CV1(int in14, int *MEN_MANCHON_FIN_CV1, int TEMPO_PERTE_CELL_CV1);
int Tempo_ctrl_perte_perte_target(int TEMPO_PERTE_TARQUET, int in15);
int set_memoire_avance_d_un_pas_cv1(int DEM_AVANCE_PAS_PAS_CV1, int in15, int TEMPO_PERTE_TARQUET, int MEN_AVANCE_CV_UN_PAS);
void gestion_avance_manuel_cv1(int in17,int in18,int in19,int in14,int MEN_MANCHON_FIN_CV1,int DEM_AVANCE_PAS_PAS_CV1, int MEM_AVANCE_CV1_UN_PAS, int DEM_RECUL_PAS_PAS_CV1, int *COMPT_PAS);

int main()
{
    printf(" -------------------------\n");
    printf(" == GESTION CONVOYEUR 1 ==\n");
    printf(" -------------------------\n");


    //init
    int in14 = 1; //detecttion pres tube sortie CV1
    int in15 = 1; //dectection taquet CV1
    int in17 = 0; //selection marche AV CV1
    int in18 = 0; //selection marche AR CV1
    int in19 = 0; //BP marche CV1
    int TEMPO_PERTE_TARQUET=0;
    int TEMPO_PERTE_CELL_CV1=0;
    int *MEN_MANCHON_FIN_CV1=0;
    int *COMPT_PAS = 0;
    int MEN_AVANCE_CV_UN_PAS =0;
    int DEM_AVANCE_PAS_PAS_CV1 = 0;
    int MEM_AVANCE_CV1_UN_PAS = 0;
    int DEM_RECUL_PAS_PAS_CV1 = 0;

    Set_Memoire_Manchon_Fin_CV1(  in14, in15, &MEN_MANCHON_FIN_CV1, &COMPT_PAS);

    TEMPO_PERTE_CELL_CV1 = Reset_Memoire_Manchon_Fin_CV1(in14, &MEN_MANCHON_FIN_CV1, TEMPO_PERTE_CELL_CV1);

    TEMPO_PERTE_TARQUET = Tempo_ctrl_perte_perte_target ( TEMPO_PERTE_TARQUET, in15);
    MEN_AVANCE_CV_UN_PAS = set_memoire_avance_d_un_pas_cv1(DEM_AVANCE_PAS_PAS_CV1, in15, TEMPO_PERTE_TARQUET, MEN_AVANCE_CV_UN_PAS);
    gestion_avance_manuel_cv1(in17, in18, in19, in14, MEN_MANCHON_FIN_CV1, DEM_AVANCE_PAS_PAS_CV1, MEM_AVANCE_CV1_UN_PAS, DEM_RECUL_PAS_PAS_CV1, *COMPT_PAS);


    printf("%d \n",MEN_MANCHON_FIN_CV1);
    printf("%d \n",COMPT_PAS);
    return 0;
}

void Set_Memoire_Manchon_Fin_CV1( int in14, int in15 ,int *MEN_MANCHON_FIN_CV1,int *COMPT_PAS)
{
    if (in14==1 && in15==1)
    {
        *MEN_MANCHON_FIN_CV1= 1;
        *COMPT_PAS = 0;
    }
}

int Reset_Memoire_Manchon_Fin_CV1(int in14, int *MEN_MANCHON_FIN_CV1, int TEMPO_PERTE_CELL_CV1)
{
    if (in14==0 && *MEN_MANCHON_FIN_CV1 == 1)
    {
        TEMPO_PERTE_CELL_CV1++;
        if (TEMPO_PERTE_CELL_CV1>50)
        {
            *MEN_MANCHON_FIN_CV1=0;
        }
    }
    else
    {
        TEMPO_PERTE_CELL_CV1 = 0;
    }

    return TEMPO_PERTE_CELL_CV1;
}

int Tempo_ctrl_perte_perte_target(int TEMPO_PERTE_TARQUET, int in15)
{
    if (in15 == 0)
    {
        if (TEMPO_PERTE_TARQUET < 50)
        {
            TEMPO_PERTE_TARQUET++;
        }
    }
    else
    {
        TEMPO_PERTE_TARQUET = 0;
    }

    return TEMPO_PERTE_TARQUET;
}

int set_memoire_avance_d_un_pas_cv1(int DEM_AVANCE_PAS_PAS_CV1, int in15, int TEMPO_PERTE_TARQUET, int MEN_AVANCE_CV_UN_PAS)
{
    if ((DEM_AVANCE_PAS_PAS_CV1 == 1) && (in15 == 0) && (TEMPO_PERTE_TARQUET>40))
        {
            MEN_AVANCE_CV_UN_PAS = 1;
        }
    return MEN_AVANCE_CV_UN_PAS;
}


//GESTION MANUEL CV1

void gestion_avance_manuel_cv1(int in17,int in18,int in19,int in14,int MEN_MANCHON_FIN_CV1,int DEM_AVANCE_PAS_PAS_CV1, int MEM_AVANCE_CV1_UN_PAS, int DEM_RECUL_PAS_PAS_CV1, int *COMPT_PAS)
{
    if((in17=0) && (in18==0) && (in19 == 1) && (in14==0) && (MEN_MANCHON_FIN_CV1 == 0))
    {
        DEM_AVANCE_PAS_PAS_CV1=1;
        MEM_AVANCE_CV1_UN_PAS=0;
        DEM_RECUL_PAS_PAS_CV1=0;
        *COMPT_PAS = 0;
    }
}


Merci d'avance!
cordialement!

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
22 févr. 2014 à 13:51
Bonjour,

Lorsque tu compiles, il faut lire les messages de son compilateur.
Vu ton code, j'imagine qu'il a dû remonter plein d'avertissements.

Remarques sur le nom des variables :
Evite de mettre le nom de tes variables en lettres capitales. On réserve cet usage pour les constantes.
int *MEN_MANCHON_FIN_CV1=0;
int *COMPT_PAS = 0;

Il s'agit de pointeurs. Donc c'est plutôt NULL qu'on met.

Set_Memoire_Manchon_Fin_CV1( in14, in15, &MEN_MANCHON_FIN_CV1, &COMPT_PAS);
Comme dit plus haut, MEN_MANCHON_FIN et COMPT_PAS sont des pointeurs. Donc si tu passes leurs adresses, il s'agit de variable de type int**. Ce qui est contraire au prototype de la fonction Set_Memoire_Manchon_Fin_CV1(). Donc, soit tu passes MEN_MANCHON_FIN_CV1 directement en argument, soit tu changes type (int au lieu de int*). De même pour COMPT_PAS.

Cette remarque s'applique également aux autres fonctions.

printf("%d \n",MEN_MANCHON_FIN_CV1);
printf("%d \n",COMPT_PAS);

MEN_MANCHON_FIN_CV1 est de type int*. Il faut donc mettre *MEN_MANCHON_FIN_CV1. Même remarque pour COMPT_PAS.

Corrige tout ça. Et si tu as encore des problèmes, reposte ton code corrigé.

Cdlt,
0