TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: nbc en 12 de Febrero de 2009, 20:33:12
-
hola , los sigo hace mucho y leo todo lo posible antes de preguntar algo , no quiero que me reten ..... pero esta vez me superó
resulta que al leer datos de la eeprom me aparecia entremedio basura , despues de leer lo de poner #rom int8 0xf00000 para grabar datos de 8 bits , dije
! EUREKA ¡ , pero no .... seguí probando y descubrí el problema ,para lo cual adjunto pedazo ( o trozo , como más les guste )de codigo , el problema es que al ir incrementandose la variable ibuftx salta de la dirección 31 (hexa ) a la 53 , con distintas partes del programa me hace lo mismo , si leo hasta 31 datos todo bien , pero si leo más me agrega basura entre
la dir 31 y la 53 , puede ser un error del ccs ( 4.1 0213 ) ?
////////////////////////////////////////////////////////////////////////
void enviar_eventos ( )
{
int16 i ;
fputs ( "enviar_eventos\r\n" , DEBUG ) ;
for ( i = 200 ; i < 320 ; i ++ )
{
int8 x ;
x = read_eeprom ( i ) ;
buftx [ ibuftx ] = x ;
fprintf ( DEBUG , "%lu: %02X\r\n" , i , ibuftx ) ;
ibuftx ++ ;
}
}
cuando leo en la terminal , ibuftx salta del 31 al 53 olvidé decir que en una parte anterior hago ibutx = 0
-
De que PIC se trata??
Me suena raro las direcciones que quieres ocupar en EEPROM, me da la impresion que no te alcanza la cantidad de bytes disponibles para lo que quieres hacer... :mrgreen:
-
hola , gracias por tu interes , el pic es un 18f8720 , y tiene 1k de eeprom , asi que ese no es el problema , ademas despues del salto sigue leyendo bien las direcciones y los datos siguientes . antes de llegar a esta rutina , el ibuftx paso por otra que tambien lo incrementó y viene con un valor de 6 ; aqui pongo el codigo completo de esa parte , aclaro que previamente tengo grabados en la eeprom datos varios en secuencia para poder leerlos y ver que sale mal.
void enviar_encabezado ( ) //siempre envia encabezado
{
fputs ( "enviar_encabezado\r\n" , DEBUG ) ;
ibuftx = 0 ;
buftx [ ibuftx ++ ] = 0X05 ;
buftx [ ibuftx ++ ] = 0X64 ;
buftx [ ibuftx ++ ] = 0 ; // long. mens. ;la funcion de cierre completa este valor
buftx [ ibuftx ++ ] = bufrx [ 3 ] ; // control
buftx [ ibuftx ++ ] = bufrx [ 5 ] ; // destino del mensaje
buftx [ ibuftx ++ ] = ESTA_ESTACION ; // fuente del mensaje
ibufrx = 6 ;
}
void enviar_eventos ( )
{
int16 i ;
fputs ( "enviar_eventos\r\n" , DEBUG ) ;
for ( i = 200 ; i < 320 ; i ++ )
{
int8 x ;
x = read_eeprom ( i ) ;
buftx [ ibuftx ] = x ;
fprintf ( DEBUG , "%lu: %02X\r\n" , i , ibuftx ) ;
ibuftx ++ ;
}
}
-
estas simulando o estas en circuito armado?
si estas simulando puede ser que el error venga del simulador, y más si es el proteus, porqque para mi el código esta bien
-
hola , no lo estoy simulando ,tengo la placa hecha y conectada con hyperterminal .
-
a mi ya me paso eso, y si, es un bug del css, ponle "STATIC int16" a tu variable y lo mas probable que ya no tengas ese problema...
-
te agadezco la respuesta, lo probaré y si funciona lo pondré en el foro , tal vez le resuelva el problema a algun otro...