Autor Tema: rutina calcula lrc  (Leído 2842 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado criollo

  • PIC10
  • *
  • Mensajes: 2
rutina calcula lrc
« en: 19 de Agosto de 2011, 23:04:33 »
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);

}


Desconectado criollo

  • PIC10
  • *
  • Mensajes: 2
Re: rutina calcula lrc
« Respuesta #1 en: 19 de Agosto de 2011, 23:07:47 »
aclaro que logicamente no es necesario que haga una segunda funcion que lo unico que haga sea llamar a la primera pero la puse a modo de ejmplo,porque la rutina para calculo del lrc de modbus la necesito para utilizarla y varias veces dentro del programa


saludos al foro

Desconectado zerovlc

  • PIC10
  • *
  • Mensajes: 28
Re: rutina calcula lrc
« Respuesta #2 en: 25 de Agosto de 2011, 06:16:40 »
en el codigo este:
int lrc_int(char ent[])
 {
int salida;

 salida=lrc_var(ent);


 return(salida);
 }

llamas a a lrc_var y le pasas el primer valor de ent, aunque ent sea una cadena, no te lo pilla como cadena posiblemente yo lo que haria seria pasar el valor por referencia estableciento un puntero que apunte a la direccion de memoria y asi no tendras problema es como yo lo solventaria.


 

anything