Projet

Général

Profil

« Précédent | Suivant » 

Révision 899

Ajouté par lefraisse il y a environ 4 ans

Rectrame : debuger checksum

Voir les différences:

SP4c12.c
/* NOTE:THIS IS A TYPICAL EXAMPLE. */
/***********************************************************************/
#include "sfr32c87.h"
#include <math.h>
void uart0_init(void);
void uart0_tx(char c);
char uart0_rx();
void alphabet(void);
int hex2int(char*c);
int rectrame(char* buffer);
int hex2int(char*c);
void main(void)
{
char c = 'A'; //Utilis? pour la fonction alphabet
int i=0,j;
char table[10][80];
char buffer[80];
uart0_init();
while(1){
rectrame(buffer);
char trame[80];
rectrame(trame);
//alphabet(); test alphabet
/* arriv?e d'un caract?re sur le port s?rie
......
//Initialisaton du Registre U0C0
clk1_u0c0 = 0;
clk0_u0c0 = 1;
crs_u0c0 = 1;
crs_u0c0 = 0;
crd_u0c0 = 1;
nch_u0c0 = 0;
ckpol_u0c0 = 0;
......
u0brg = 0x20;
//Initialisaton du Registre U0C1
te_u0c1 = 0;
re_u0c1 = 0;
te_u0c1 = 1;
re_u0c1 = 1;
//uoirs_u0c1 = 0;
u0rrm_u0c1 = 0;
u0lch_u0c1 = 0;
......
}
void uart0_tx(char c){
te_u0c1=1;
crd_u0c0=1;
crs_u0c0=0;
while (ti_u0c1=0); //attente
u0tb=c;
}
char uart0_rx(){
while (ri_u0c1=0); //attente
while (!ri_u0c1); //attente
return u0rb;
}
......
}
}
int rectrame(char *buffer){
int i=0,cheksum=0;
while (uart0_rx()!='$'); //attente d'une trame
while (uart0_rx()!='*'){
buffer[i]=uart0_rx();
i++;
}
}
int hex2int(char *c){
int i;
int d;
for (i=0;i<2;i++){
//Pour des chiffres, la valeur hexad?cimal correspond ? la valeur d?cimal
if ( (c[i]>'0') && (c[i]<'9')){
d += (c[i] - '0')*pow(2,-4*(i-1));
c[i]-='0';
}
//La valeur d?cimale de A est 10 et au max on aura la lettre F en hexa
else if ((c[i]>'A')&&(c[i]<'F')){
d += (c[i]-55)*pow(2,-4*(i-1));
c[i]-=55;
}
}
d=c[0]+16*c[1];
return d;
}
int rectrame(char *buffer){
int i=0,j=0;
char checksum, c;
char fin_trame[]={'0','0'};
int verifchecksum;
while (uart0_rx()!='$'); //attente d'une trame
//Reception trame dans buffer et calcul du checksum avec un OU exclusif sur chaque caract?re de la trame
c=uart0_rx();
while (c!='*'){
buffer[i]=c;
c=uart0_rx();
i++;
if ((buffer[i]!='$')&&(buffer[i]!='*')){
checksum^= buffer[i]; //ou exclusif sur chaque caract?re de la trame
}
}
//R?c?ption des 2 caract?res apr?s le * de la trame dans la cha?ne fin_trame (utile pour le checksum)
while (j<2){
fin_trame[j]= uart0_rx();
j++;
}
//V?rification entre le checksum calcul? tout au long de la trame et celui calcul? par la converion du champ en hexa apr?s '*'
verifchecksum = hex2int(fin_trame);
//if (verifchecksum!=checksum){
// i=0;
//}
return i;
}
/*int irectrame(char *buffer){
int etat =1
switch(etat){
case 1: if (
}
}*/

Formats disponibles : Unified diff