A.2. Reliability and Safety Analysis and Modeling Techniques
A.2.6. Petri Net Models
En la presente sección se presenta de manera resumida la forma de crear, compilar y depurar un proyecto utilizando el Software Code Warrior (CW) de Free- Scale. Para tal efecto el estudiante debe bajar el instalador del software de la página del fabricante (www.freescale.com) y seguidamente instalarlo, las características mínimas requeridas para el PC son:
Procesador de 1GHz Intel Pentium o compatible.
512 MB de RAM (recomendado 1GB).
Puerto Serial DB9.
Sistema Operativo Microsoft Windows 2000, XP o Vista.
El software instala automáticamente la versión de evaluación, no es necesario registrarla, esta licencia permite el desarrollo de proyectos como si se tratase de la versión profesional, por un periodo de 30 días, una vez cumplido este lapso la licencia trabaja como la edición especial que es libre permanentemente pero tiene limitaciones en el tamaño del código en C que puede ser escrito (hasta 32KB para MCU‟s HC08 y 64KB para ColdFire) suficientes para aplicaciones didácticas introductorias.
1. Creando un Proyecto.
Se ejecuta el Ambiente de Desarrollo Integrado (IDE) mediante la siguiente ruta: Inicio > Programas > CW For Microcontrollers Vxx. > CodeWarrior IDE. Una vez arranca el programa se despliega la siguiente ventana de dialogo:
Seguidamente se selecciona el botón para la creación de un proyecto nuevo (Create a New Project) continuación aparece una ventana de dialogo de dispositivos y conexiones (Device and Connection). Se selecciona algún dispositivo de las diferentes familias desplegadas y el tipo de conexión.
Para efectos prácticos esta prueba y muchas de las aplicaciones serán realizadas empleando el MCU MC68HC908JL3; además para esta primera prueba se selecciona en conexiones la opción „Full Chip Simulation’ presionando a continuación el botón „siguiente‟.
Seguidamente viene la ventana de parámetros del proyecto (Project Parameters); en el cuadro „Project name’ se asigna un nombre a cada proyecto creado, por defecto el CW asigna un nombre pero es conveniente asignar un nombre significativo para futuras revisiones.
El IDE asigna la extensión .mcp al proyecto automáticamente así como también crea una carpeta con el nombre del proyecto en la ubicación asignada en el cuadro „location’ esta puede ser una ubicación por defecto o la que asigne el usuario empleando el botón set…. Se selecciona como lenguaje de programación „Absolute assembly‟ para ser soportado por el proyecto de la misma forma si se va a realizar programación en „C‟ se selecciona en la casilla correspondiente.
En este punto se puede seleccionar el botón „Finalizar‟ tomándose los demás parámetros por configurar por defecto.
Si se opta por el botón „Siguiente‟, por el momento se deben seleccionar las opciones por defecto que presenten las siguientes ventanas de dialogo. Se recomienda leer los letreros explicativos que presenta el asistente para tener una idea de lo qué significa cada opción.
2. Escribiendo un programa
Una vez creado el proyecto aparece la ventana principal del ambiente de desarrollo (ver Fig 40), donde el CW crea automáticamente una serie de carpetas y archivos que forman parte del proyecto proporcionando definiciones y códigos de inicialización básicos, por ejemplo se puede observar en la carpeta „includes’ un archivo con el nombre del dispositivo y la extensión .inc (MC68HC908JL3.inc) en el se encuentran contenidos los nombres de los puertos y registros asociados a las direcciones de memoria del microcontrolador guardando una correspondencia con los nombres que se encuentran en las hojas de datos y manuales de referencia del fabricante.
En la carpeta „sources‟ se almacenan los archivos y funciones que forman parte del programa principal en especial el CW genera el archivo „main.asm‟ que contiene por defecto una rutina con un ciclo infinito, ésta contiene un macro que alimenta el WatchDog. A continuación se realizará una rutina en el que el montaje del proyecto y sus correspondientes procesos de compilación, depuración y simulación.
Para tal efecto a continuación se presenta el código que será utilizado: LOOP0 LDA #$FF ; A = $FF
LOOP1 INCA ; A = A + 1 CMP #3 ; A = 3?
BNE LOOP1 ; Salto a LOOP1 si A!=3. LDA #$FF ; A = $FF = 255 LDHX #$1234 ; H:X = $1234 LDHX #$4321 ; H:X = $4321 LDHX #0 ; H:X = $0000 LDX #$FF ; X = $FF LOOP2 INCX ; X = X + 1 CPX #4 ; X = 4?
BNE LOOP2 ; Salto a LOOP1 si A!=4.
JMP LOOP0 ; Salto a LOOP0 (Se Repite el Ciclo)
Las líneas de código anteriores tienen el propósito de ayudar a familiarizar al estudiante con algunas de las instrucciones empleadas para la manipulación de los registros. Como se observa en los comentarios el flujo del programa es el siguiente; se inicializa A = $FF luego se incrementa hasta 3 haciendo uso de la instrucción BNE con la que compara A con 3 en caso de ser diferente (¡=) salta hasta la etiqueta LOOP1 realizando un ciclo finito hasta que A sea igual a 3 entonces el programa prosigue con la siguiente instrucción que es la de cargar de nuevo registro A con $FF, seguidamente se emplea la instrucción LDHX con 3 valores diferentes ($1234, $4321 y $0000), a continuación se carga la parte baja del registro H:X con $FF realizándose un ciclo similar al realizado con el registro A pero utilizando otro valor de comparación, al finalizar este ciclo la instrucción JMP LOOP1 vuelve a ejecutar todo de nuevo de manera indefinida.
3. Compilando y Simulando un Proyecto.
Para compilar y simular este código debe ser insertado en el archivo main.asm a partir de la etiqueta llamada ‘mainLoop:’; seguidamente teniendo en cuenta que se ha escogido previamente como tipo de conexión la opción „Full Chip Simulation‟ se debe guardar el proyecto y emplear los botones „make‟ y „debug‟ en este orden, ver la Figura 41.
Al compilar en caso de que existan errores en el código, la herramienta presenta las correspondientes alertas, con un clic sobre cada error automáticamente se indica el lugar o la línea de código que presenta el error. En caso de no presentarse errores de compilación se puede proceder con la herramienta Debug; se abre una nueva ventana llamada „True-Time Simulator & Real-Time Debugger‟ que será empleada para simular la ejecución del programa compilado.
En la ventana de simulación y depuración (ver Fig 42) se cuenta con diferentes herramientas con las que se puede ejecutar el código y comprobar su correcto funcionamiento, entre otras aplicaciones con esta interfaz se puede ejecutar la aplicación paso a paso, insertar puntos de quiebre (Break Points), resetear, modificar variables registros y puertos, también se puede interactuar con los módulos TIMER, ADC, IRQ y demás módulos que posea en MCU en uso.
Como se observa en la figura hay diferentes módulos que presentan información de diferente índole, como el mapa de memoria con la información almacenada en ella, los valores cargados en los registros, etc. En la barra de „Debug’ se observan los iconos encargados del control de la ejecución de las instrucciones durante una simulación:
Run: Correr la aplicación hasta encontrar un BreakPoint Single Step: Correr la aplicación paso a paso.
Step Over: Correr una subrutina sin entrar en ella. Step Out: Correr hasta salir de una subrutina en curso. Halt: Parar la Simulación.
Reset: Reiniciar.
Al correr la aplicación paso a paso se puede ir observando las instrucciones que se van ejecutando, así como los registros y banderas que van siendo modificados dependiendo del tipo de instrucción ejecutada.
4. Programando un dispositivo.
Para programar un dispositivo se sigue un procedimiento similar al realizado para simular una aplicación; la diferencia radica en que se debe cambiar el tipo de conexión dependiendo del tipo de POD de programación que se valla a utilizar; para el caso del circuito descrito anteriormente se selecciona la opción „MON08 Interface‟ en la ventana principal del ambiente de desarrollo.
Al ejecutar el Debug se abre una ventana de opciones en la que se configuran parámetros como la tasa de transferencia, puerto de comunicación y otros parámetros que deben ser configurados adecuadamente para la correcta comunicación entre el PC y el MCU.
CAPITULO 6: INTRODUCCIÓN A LA PROGRAMACIÓN EN C y