abstract = "En la presente tesis se investiga la generacion
automatica de programas de sistemas basados en
microcontrolador empleando una metodologia poco
explorada como es la programacion inductiva en la cual
el punto de partida para la sintesis de un programa es
una tabla de ejemplos de entrada-salida. La metodologia
propuesta se fundamenta en la aplicacion de algoritmos
de programacion genetica lineal. Un sistema basado en
microcontrolador, dependiendo de su aplicacion, incluye
ademas del microcontrolador otros dispositivos
perifericos como pulsadores, teclado matricial, display
de indicadores de siete segmentos, pantalla LCD de
texto, sensores, actuadores, etc. Estos dispositivos se
conectan al microcontrolador a traves de las lineas de
entrada/salida y cada dispositivo tiene una forma
particular de interaccion y en algunos casos un
protocolo complejo de comunicacion con el
microcontrolador. Se propone la aplicacion de la
programacion genetica lineal en la generacion
automatica de rutinas de gestion de los dispositivos
perifericos y de rutinas frecuentes, en la programacion
de microcontroladores, como rutinas de conversion de
codigo o rutinas de implementacion de maquinas de
estados. La metodologia propuesta se describe
principalmente aplicada a la arquitectura 8051, pero se
puede aplicar a otras arquitecturas, como se muestra en
un ejemplo final ilustrativo, en el cual se generan
automaticamente rutinas para la tarjeta Arduino Mega de
arquitectura AVR. Para resolver el problema complejo de
sintesis de los programas se han aplicado dos
estrategias. En primer lugar, segun el programa a
sintetizar, en la evaluacion de la aptiiii tud de un
programa genetico, se ha asignado una funcion, a
maximizarse, a cada bit de resultado binario o al
diagrama de tiempo de cada pin de un puerto del
microcontrolador donde esta conectado el dispositivo
periferico, lo que ha permitido realizar una
optimizacion multi-objetivo. En segundo lugar, se ha
dividido un programa en lenguaje maquina en segmentos
que evolucionan paralelamente colaborando entre si, lo
que significo la aplicacion de un algoritmo de
coevolucion cooperativa. La metodologia propuesta, en
base a estas estrategias, ha permitido generar
automaticamente programas, en algunos casos, con un
tamano de codigo mas pequeno o un tiempo de ejecucion
mas corto que los programas escritos por un programador
humano.",