Problemas ¿Largo de Programa?

Estimados,

Estaba desarrollando un controlador para mantener vuelo estable de aero-modelos.
Tengo problemas con el largo del programa (al parecer), escribo una linea más y el procesador deja de trabajar correctamente y eso llevo recién 12Kbytes de mi arduino-uno.
La verdad que es como darse con la cabeza contra la pared, no lo puedo resolver.
Lo comparto para que lo puedan revisar, creo que es interesante y también les puede servir de algo, tiene:

  • un mini sistema operativo
  • Manejo de String
  • Temporizador (interrupción)
  • EEPROM
  • Float2String y al reves.

Es programa de 3 sketch el problema lo deje en el ultimo:

  • Test_PI_Funciones_02.ino
  • Las ultimas dos lineas
  • Lo ejecuto sin problemas, pero le pongo las ultimas 2 linea y al ejecutar la instrucción PIstart (a través del monitor serial) el Arduino Colapsa o entra en un loop en alguna parte.
  • Si ejecutas PIhelp salen todas las instrucciones disponibles.

De antemano gracias
Saludos José Miguel

Test_PI_Com_02.rar (3.67 KB)

Hola Jose Miguel!

No puedo abrir el archivo en este ordenador (cosa del ordenador, no del archivo)..

No quiero comentarte algo al tun-tún (que lo voy a hacer, pero bueno... :wink: ), pero por experiencias personales, a mi me ha pasado algo parecido y creia que era el largo del programa, pero finalmente resultaba ser que me pasaba con los arrays que utilizaba.. me pasaba de largo con éstos, se saturaban los arrays y saturaban mi Arduino Mega (para aquel proyecto utilicé el Mega)
lo arreglé volviendo a poner la posicion 0 para el array cada vez que se ejecutaba el loop.
No se si a lo mejor te ocurre lo mismo con el String o si tienes algun array...

como no puedo ver el archivo ahora es posible que esto que te cuento no te sirva de nada, pero por si acaso y para que puedas ir probando algo...

suerte!!

Buenas tardes:
Creo que el problema es que te comes la RAM. Prueba a utilizar PROGMEM para liberar RAM.
El fichero Test_PI_Aux_02.ino no me deja abrirlo.

Un saludo

Interesante como para no creerlo:

solo dos llamadas a Serial.print() hacen el problema, WTF!?
también iba a sugerir un problema de desbordamiento de RAM pero ahora no lo creo, ya lo mirare mejor mas tarde.

/* --- Por cierto muy bien ordenado el código, pero le faltan comentarios. --*/

para los que no puedan abrir bien el sketch el archivo principal es "Test_PI_Com_02.ino"
Jota1973 ojala lo puedas subir en .zip

Muchas Gracias,
Voy a subir el Zip y tomaré el concejo de los comentarios.

Auque logre seguir adelante, cambiándome a otra función
quedé intrigado porqué con dos Serial.Print se muere el programa. Inicialmente me había pasado algo similar, pero pensé que era mi inexperiencia y que en alguna parte había quedado en un loop infinito. Luego de eso me puse más serio y lo hice bien ordenadito: un skecth para el mini SO, un Skecth para la funciones auxiliares y asi...
... Y bueno apareció el problema: No me es razonable que por repetir la función muchas veces se cuelgue, llegue a pensar que se "atora" el puerto con la avalancha de caracteres... pero tampoco me convenzo.

Nota: efectivamante Test_PI_Com_02.ino es el principal
Igual les dejo la inquietud, por si alguien descubre el misterio

Saludos José Miguel.
Nota: Ahora voy por el giroscopio (como varios por aqui) con el fin de hacer un navegador para un avión RC.
voy pasito a pasito:

  • mini SO y COM OK
  • PID OK
  • Gyro en proceso

próximo pasos

  • Gyro + PID + Servo
  • Prueba de vuelo nivelado sin RC

Veo que esa función es llamada mediante un temporizador. ¿No será que no le da tiempo a ejecutarse por completo y vuelve a ser rellamada por el temporizador? Prueba a ver utilizando en el monitor serial y el setup una velocidad más alta para que los serial.print de esa función se ejecuten más rápido.
Saludos.