Autor Tema: Tengo problemas con _mul en CCS!!!  (Leído 2093 veces)

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

Desconectado ales

  • PIC10
  • *
  • Mensajes: 33
Tengo problemas con _mul en CCS!!!
« en: 25 de Abril de 2008, 14:22:05 »
Hola amigos, necesito comparar dos Fechas/Horas para ello estoy convirtiendo a segundos las dos para despues saber en cual han pasado mas segundos y asi compararlas, pero la función int32 _mul(int16, int16) del CCS no me pincha bien parece que solo admite en sus argumentos int16 para devolver int32, y verán que llega el momento en que necesito pasarle int32, es ese el problema????

Aqui está mi código:

#define dia 0
#define mes 1
#define anno 2
#define hora 3
#define minuto 4
#define seg 5
#define sem 6

int32 t_s;
int Dias_por_mes[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

int32 Min_to_Seg(int min)
{
 t_s = _mul(min, 60);
 return t_s;
}

int32 Hora_to_Seg(int horaA)
{
 t_s = _mul(60, Min_to_Seg(horaA));
 return t_s;
}

int32 Dia_to_Seg(int diaA)
{
 t_s = _mul(24, Hora_to_Seg(diaA));
 return t_s;
}

int32 Mes_to_Seg(int mesA)
{
 t_s = _mul(mesA, Dia_to_Seg(Dias_por_mes[mesA]));
 return t_s;
}

int32 FechaHora_to_Seg(int *FH)
{
 t_s = Mes_to_Seg(FH[mes]) + Dia_to_Seg(FH[dia]) + Hora_to_Seg(FH[hora]) + Min_to_Seg(FH[minuto]) + FH[seg];
 return t_s;
}

mE.FechaHora y mS.FechaHora son arreglos de 7 elementos dentro de una estructura. Donde los elementos son Dias, Mes, Año, Hora, Minutos, Segundos y Semana que corresponda.

if (FechaHora_to_Seg(mE.FechaHora) <= FechaHora_to_Seg(mS.FechaHora))

Gracias de antemano y saludos.


Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Tengo problemas con _mul en CCS!!!
« Respuesta #1 en: 25 de Abril de 2008, 23:23:53 »
Ey Ales! Muy interesante tu planteamiento... pero tienes que hacerlo obligatoriamente de ese modo, conviertiendo a segundos? no podrías comparar separadamente años, luego meses, día... y por último la hora? Digo, para evitarte los problemas con variables de tantos bits... no sé, sólo pensaba en esa opción, qué te parece?
Saludos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Tengo problemas con _mul en CCS!!!
« Respuesta #2 en: 26 de Abril de 2008, 03:35:10 »
Parece que ese puede ser el problema, ya que esa función no admite int32 como parámetros.

Otra posible solución, mezcla de tu propuesta y la propuesta de firepic, es la de utilizar dos cálculos: una variable almacena la fecha, y la otra almacena el cálculo de segundos de un día.

De esta manera, si hay diferencias entre fechas, ya sabes cuál es la mayor mirando la primera variable.
Sólo en el caso de que compares la misma fecha, tendrías que comparar el segundo cálculo para saber cuál ocurrió primero y cuál después.

Desconectado ales

  • PIC10
  • *
  • Mensajes: 33
Re: Tengo problemas con _mul en CCS!!!
« Respuesta #3 en: 26 de Abril de 2008, 11:36:22 »
Muchas gracias por responder tan rápido, pues seguiré las sugerencias de ambos, creo que va a ser lo mejor por que sino no podré hacer la comparación.

Gracias, gracias.... :-/

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Tengo problemas con _mul en CCS!!!
« Respuesta #4 en: 27 de Abril de 2008, 00:22:33 »
Excelente! como siempre así son todas las explicaciones del maestro nocturno!
Allí entonces tienes para darle amigo Ales...
No olvides contarnos cómo te fue.
Saludos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado ales

  • PIC10
  • *
  • Mensajes: 33
Re: Tengo problemas con _mul en CCS!!!
« Respuesta #5 en: 29 de Abril de 2008, 09:48:08 »
Excelente sus ideas, FirePic me diste el empujón y Nocturno terminaste solucionando mi problema.
Remedio Santo...... :-)

Gracias gracias......
 
Al final quedó así:

int32 Min_to_Seg(int minA)
{
 t_s = _mul(minA, 60);
 return t_s;
}

int32 Hora_to_Seg(int horaA)
{
 t_s = _mul(60, Min_to_Seg(horaA));
 return t_s;
}

int32 Anno_to_Dia(int annoA)
{
 t_s = _mul(365, annoA);
 return t_s;
}

int32 Mes_to_Dia(int mesA)
{
 t_s = _mul(Dias_por_Mes[mesA], mesA);
 return t_s;
}

int1 Comparar_FechaHora(int *FH_S, int *FH_E)
{   // Necesidad que FH_S < FH_E
 if ((Anno_to_Dia(FH_S[anno]) + Mes_to_Dia(FH_S[mes]) + FH_S[dia]) < (Anno_to_Dia(FH_E[anno]) + Mes_to_Dia(FH_E[mes]) + FH_E[dia]))
  return false;
 else
  if ((Hora_to_Seg(FH_S[hora]) + Min_to_Seg(FH_S[minuto] + FH_S[seg])) < (Hora_to_Seg(FH_E[hora]) + Min_to_Seg(FH_E[minuto]) + FH_E[seg]))
   return false;
 return true;
}

O sea, Fecha llevada a días y tiempo llevado a segudos, y nada, pues bien.



gracias gracias.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Tengo problemas con _mul en CCS!!!
« Respuesta #6 en: 29 de Abril de 2008, 12:50:49 »
Te quedó muy limpio y compacto. Enhorabuena.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Tengo problemas con _mul en CCS!!!
« Respuesta #7 en: 29 de Abril de 2008, 20:37:31 »
Felicitaciones Ales!  :-/ Listo tu problema... quedó excelente el programa!  :-)
Saludos!
 :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web