Autor Tema: ¿Algún error de concepto ?  (Leído 1866 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado smxabi

  • PIC10
  • *
  • Mensajes: 16
¿Algún error de concepto ?
« en: 22 de Abril de 2006, 17:34:37 »
Me dirijo a los expertos, ya que estoy empezando con el C para PIC. Mi problema es el siguiente: un modem GSM envía la siguiente secuencia en hexa: (lo veo con el hyperterminal)

07914306090969F5040B914336793446F800006020410135924009416650DA0C829E4E

Estoy tratando de averiguar si en esa secuencia se encuentra el string siguiente: 416650DA0C829E4E (si se encuentra y al final). Son formatos PDU de un SMS

Para ello:

 include <16F876.h>
#include <string.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#define buffer_size 64

char buffer[buffer_size];
int next_in = 0;
int si_find=0;
char  alarma_on[9] = {0x41,0x66,0x50,0xDA,0x0C,0x82,0x9E,0x4E,0x00}; Es preciamente el string que se busca
...

capturo el buffer
#int_rda
void serial_isr() {
  int t;

  buffer[next_in]=getc();
  t=next_in;
   next_in=(next_in+1) % buffer_size;
   if(next_in==0 )
    next_in=t;           
y ahora em main() busco el string

 si_find= strstr(buffer,alarma_on);
if (si_find != 0)
{
puts("Encontrado");

Pero resulta que no lo encuentra. ¿ Que estoy haciendo mal ?

Gracias adelantadas

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ¿Algún error de concepto ?
« Respuesta #1 en: 22 de Abril de 2006, 20:05:52 »
Fijate que el string que recibes del modem GSM son caracteres ASCII.  Debes agrupar 2 caracteres , convertirlos en HEXA para luego recien obtener el dato que deseas leer.

Por ejemplo 41 , no es 0x41.  Es un '4' y un '1', debes hacer una rutina que te permita hacer la conversion.

Sino, al comparar siempre te dará que son diferentes.

La otra opcion es que directamente compares con el string "410135924009416650DA0C829E4E".


Saludos

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado smxabi

  • PIC10
  • *
  • Mensajes: 16
Re: ¿Algún error de concepto ?
« Respuesta #2 en: 23 de Abril de 2006, 11:09:17 »
Gracias Maunix por tu ayuda.
Pero sigo muy confuso. En VB logré que todo el tinglao que tengo montado funcionara. Para ello lo que recibía del modem entraba en un buffer de string. El string a comparar lo hacía así:
alarma_on = Chr$(65) & Chr$(102) & Chr$(80) & Chr$(218) & Chr$(12) & Chr$(130) & Chr$(158) & Chr$(78) en donde cada caracter hexa 0x41 lo convertía a decimal y luego a string mediante la función chr$. Luego hacia una inspección del buffer con alarma_on
Pero con C no veo como hacerlo.
Si defino
char alarma_on[17] =  "416650DA0C829E4E" // por lo visto el nº de caracteres del array hay que aumentarlo en 1 para el 0x00
¿Puedo hacer directamente la busqueda en buffer?
Estoy utilizando ccs c y no puedo hacer tracer del programa. Por eso mi confusión. He encargado a USA, a CCS una tarjeta para hacer el debugging del programa. Sin eso estoy ciego


Gracias adelantadas desde Asturias - España

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ¿Algún error de concepto ?
« Respuesta #3 en: 23 de Abril de 2006, 12:33:38 »
Si defines un array de char. y cada char es una letra no hace falta que incrementes en 1 el 0x00.

Y si podrias comparar byte a byte y listo, asunto solucionado ;)


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado smxabi

  • PIC10
  • *
  • Mensajes: 16
Re: ¿Algún error de concepto ?
« Respuesta #4 en: 24 de Abril de 2006, 06:26:16 »
Me ha sido muy util tu ayuda. El error fundamental era un puntero y que los caracteres que recibia del modem eran un string (no hexa). Me estaba confundiendo con otro proyecto que hice con NOKIA F-BUS en VB6
Ahora me queda así y si funciona (al menos en VC++)

char str[] =    "416650DA0C829E4E";
char string[] = "07914306090969F5040B914336793446F800006020410135924009416650DA0C829E4E";
int main( void )
{
   char *puntero;
   puntero = strstr( string, str );
 
   if ( puntero != NULL )
      puts( "Encontrado" );
   }

Muy agradecido
Javier

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ¿Algún error de concepto ?
« Respuesta #5 en: 24 de Abril de 2006, 08:14:18 »
A veces un problema muy simple se manifiesta como algo grave y eso nos hace pensar que estamos haciendo todo mal!  :)  pero como viste era solo algo sencillo.

Me alegro lo hayas solucionado.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything