La modularidad es tu amiga. Escriba su bucle principal para hacer su función llamando a las funciones, a las que llama a las funciones, ..., hasta el nivel en el que sus funciones serían simples. Comience con el bucle principal y el siguiente nivel hacia abajo, haga funciones de código auxiliar; o bien vacío:
function foo(){
;
}
o falso:
function read_temperature(){
return(95);
}
, que no hace nada más que devolver lo que sea necesario para que el nivel de llamada pueda continuar. Cuando ese nivel funcione, baje un nivel y comience a completar un código simple que también llama funciones de código auxiliar. Desmarque gradualmente una función a la vez hasta que tenga una aplicación que funcione.
Para depurar una función que devuelve un valor incorrecto, o para crear una sin ninguna influencia del resto de la aplicación, puede crear andamios, un simple boceto que solo alimenta la función con algunos valores de ejemplo y, dentro de la función, imprimir los valores de los parámetros y algunos valores intermedios, hasta que obtenga una idea de qué parte de la función está fallando. Incluso he creado funciones falsas que me piden que en el terminal me devuelva un valor. (Obviamente, esta técnica solo puede funcionar si el sistema puede tolerar la velocidad relativamente glacial de los humanos. Otro uso para los andamios).
Stubbing funciona especialmente bien para ser compatible con funciones que se interconectan con el hardware, lo que le permite comenzar a abrir la aplicación antes de que tenga que sumergirse en hojas de datos, problemas de tiempo y otros detalles (como, ¡no tener las partes!) que de lo contrario podría detener su progreso.
Hablando de problemas de tiempo, alternar un pin de salida en un punto particular de tu programa, como entrar y salir de un ISR, te da una onda cuadrada en el pin Arduino cuya frecuencia o ciclo de trabajo te pueden dar una idea de El tiempo interno de su programa. El formulario directo de E / S del puerto, por ejemplo,
PORTC ^= 0x01;
, distorsionará el tiempo menos que llamando a digitalWrite()
. Útil si tiene un 'alcance' o uno de los DMM con la capacidad de medir la frecuencia y / o el ciclo de trabajo.
De manera similar, puede usar un pin de salida analógica para enviar un valor numérico a su medidor desde el interior del programa sin alterar demasiado el tiempo ni hacer que el código se agote con las funciones de E / S en serie. Utilice los formularios de E / S directa aquí también.