Sans connaissance sur le domaine, ce code me paraît correct.
Après, pour le décalage :
RESTE[d] = RESTE[d+1] + GENERATEUR[X];
je ne saurais dire si X doit valoir d ou d+1.
Sinon, ce n'est pas l'opérateur ^ qu'il faudrait utiliser à la place de l'opérateur + 
À part ça, j'ai relevé quelques erreurs de programmation.
Dans le bloc de code avec les appel des fonctions, tu passes comme paramètres des éléments d'un tableau.
Or, la signature de ces fonctions indiquent qu'elles attendent des tableaux comme paramètres.
À moins que les variables utilisées lors de l'appel soient des tableaux de tableau (ce qui ne semble pas être le cas), ça provoquera une erreur de compilation.
Je pense que l'appel correct devrait être :
STANDARD_REQUETE(TCAN, GENERATEUR);
On ne peut pas déclarer une variable de type tableau dont la taille est la valeur d'une autre variable.
Il faut impérativement que ce soit une constante (nommée ou anonyme).
Alors à moins que longueur soit une constante globale, la déclaration de tes fonctions devrait provoquer une erreur de compilation.
ne devrait pas faire ce que tu attends.
RESULTAT est un tableau, et ne peut être comparé à un nombre.
Mais en C, un tableau est également un pointeur, qui est plus ou moins un entier.
Donc la comparaison ne provoquera pas d'erreur de compilation, mais elle sera entre la valeur du pointeur représentant le tableau (à savoir l'adresse du premier élément) et le pointeur dont la valeur est l'adresse 0x0 (à savoir NULL).
Autrement dit, cette comparaison sera toujours fausse...
Si tu veux vérifier que la « valeur » de ton tableau est nulle, tu passer par une fonction annexe.
Par exemple :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| int zero(unsigned int tab[])
{
int i;
for (i = 0; i < longueur; i++)
if (tab[i] != 0)
return 0;
return 1;
}
/* Tu peut utiliser « bool », « true » et « false » si tu inclues l'en-tête « stdbool.h ». */
/***********************/
/* On remplace alors la ligne de tout à l'heure */
if (zero(RESULTAT)) {
(...)
} |
Pour finir, j'ai quelques remarques.
1 2 3 4 5 6 7 8 9 10
| #line 12
for(c=0;c<(longueur-17);c++)//-17 car il ne faut pas inclure le CRC présent dans la trame initial
{
for(d=0;d<15;d++)
{
RESTE[d]=RESTE[d+1]+GENERATEUR[d]; //
}
RESTE[16]=TCAN[17+c]; //descente du bit suivant de la trame
} |
Ici, tu peux faire des simplifications en supprimant des opérations atomiques.
1 2 3 4 5 6
| for (c = 17; c < longueur; c++)
{
(...)
RESTE[16] = TCAN[c];
} |
Je peux me tromper, mais j'ai l'impression que les valeurs de tes tableaux ne peuvent être que 0 ou 1.
Si c'est bien le cas, c'est peut-être un peu trop gros d'utiliser des int.
Si à la place tu utilisais des (unsigned) char, tu utiliserais moins d'espace.
Les char peuvent tout à fait s'utiliser comme des entiers ; il y a juste le nombre d'entiers représentables qui est (beaucoup) plus petit.
Mais bon, c'est de la micro-optimisation...
Partager