Buenos días,
Suelo usar dos compiladores dependiendo el micro que vaya a usar, para los de 8bits uso CCS, y para 16bits uso mikroC. He programado códigos bastante grandes con CCS, aunque no tanto como el que tengo ahora entre manos con mikroC, que genera un hex de unos 241kB . En este proyecto uso comunicación con el exterior a través de ethernet mediante una página web, la cual muestra gráficas, peticiones asíncronas, etc.
Pues bien, según ha ido creciendo mi programa, he ido teniendo problemas algo extraños. Los primeros se basaban en que no se mostraban en la web algunas de las peticiones asíncronas y la solución que le encontré me parece aún mas curiosa, llamando a la siguiente función en el main, antes de entrar en el bucle infinito:
void dummyFunct()
{
delay_ms(10);
I2C1_Is_Idle();
I2C1_Start();
delay_ms(2);
I2C1_Stop();
delay_ms(10);
}
Esto hacía que cuando mostraba datos en la web de manera asíncrona, se mostrasen correctamente ¿?¿ En primer lugar pensé que sería problema de mi interfaz i2c, ya que uso un sensor sht11 con linea de reloj común al bus i2c (conectado al mismo pin del micro, la línea de datos es otra totalmente independiente) deshabilitando y habilitando el bus i2c cuando leo el sensor de temperatura.
Sin embargo, han aparecido nuevos problemas. Según he ido aumentando el código, han sido más comunes, y ya no ocurre sólamente al realizar peticiones asíncronas. He añadido una llamada a una función la cual no tiene mucha ciencia, un par de bucles for, un bucle while y poco más, todo cosas similares a otras cosas que funcionan bien. Tras compilar correctamente y refrescar la ip del mismo en el navegador, este no devuelve la web y se ¡¡reinicia automáticamente!! (lo se por un led que parpadea sólo cuando se inicia el micro). Uso un watchdog, pero lo tengo fijado a 4segundos, mientras que el reinicio del micro es casi instantáneo al solicitar la web, curiosamente a los pings responde bien sin reinicios.
Según las estadísticas que me ofrece el compilador, uso un 2% de RAM y un 25% de ROM.
Y aquí mi pregunta, ¿qué puede provocar un reinicio del micro? Yo pensaba que o se quedaba colgado o saltaba el watchdog, ¿pero reinicio por su propia cuenta? He descubierto los pantallazos azules embebidos?
Añadir que ya en su momento tuve problemas con este mismo proyecto ya que el programador de mikroE no estaba preparado para códigos tan grandes, y a partir de cierto tamaño daba error, a los pocos días me enviaron un firmware que solventó este problema.
Vaya tocho me ha quedado... saludos y gracias por leerme!