bueno la cosa es es que hago un proyecto para la universidad y debo hacer una rutina que calcule el LRC del protocolo modbus, la cual hice , al parecer no es tan dificil pero me ocurren errores si llamo a esta rutina desde otra funcion, si la llamo dentro del main no hay problema pero sin embargo si la llamo de una segunda funcion como esta"int lrc_int(char ent[])"
para explicarme mejor aca esta mi codigo:
char cadena1[]=":0103002D0002";
char cadena2[]=":0103002D0002";
int x;
int y;
int lrc_var(char cadena_prueba[]);
int lrc_int(char ent[]);
int main{
x=lrc_var(cadena1);//funciona bien
printf("%X",x);//funciona bien y muestra el valor en hexa"CD"
y=lrc_int(cadena2)//funciona mal
printf("%X",y);funciona mal y muestra "AC"
}
int lrc_int(char ent[])
{
int salida;
salida=lrc_var(ent);
return(salida);
}
int lrc_var(char cadena_prueba[]){
static int a=1;
int envio=0;
int r=0;
int hex_suma=0;
int num;
int cont1=-2;
int cont2=0;
int hex_pri=0;
char *aux1;
char *aux2;
char muestra[4];
aux1=cadena_prueba+1; //quito ";" y remanente queda en aux1, ahora aux 1 tiene la cadena completa sin los ;
num=strlen(aux1); //cant caracteres que tiene la cadena de entrada
for(a=1;a<((num/2)+1);a++)
{
r++;
cont1=cont1+2; //aumento contadores para corrimientos
cont2=cont2+2; //aumento contadores para corrimientos
strncpy(muestra,aux1,cont2);// copio n caracteres
aux2=muestra+cont1; //corro n caracteres
sscanf(aux2,"%X",&hex_pri); //lo transformo a numero
hex_suma=hex_pri+hex_suma; //variable auxiliar para suma
}
if(r==(num/2))//si se termino el ciclo de sumas se calcula el lrc
{
hex_suma=0xFF-hex_suma;
hex_suma=hex_suma+0x01;
}
envio=hex_suma;
hex_suma=0;
return(envio);
}