Paso 3: ESTRUCTURA GENERAL DE UN PROGRAMA
ESTRUCTURA GENERAL DE UN PROGRAMA
Ya teniendo una herramienta basica para gestion del PAC, se procedio a indagar un poco mas en como es la estructura de un programa para PAC de Opto22.La informacion obtenida fue la siguiente:
Los archivos con extensión .crn1, .crn2, .crn3, deben tener todos como
nombre de como se "bautizo" el programa. * El archivo .crn1 contiene una linea: nombre de archivo. " PNAME "; PNAME de donde es el nombre con se "bautizo el programa. Las otras lineas de este archivo no cambiaron nunca con diferentes programas se crearonEl archivo .crn2 contiene los nombres de las "tareas" conforman las Naciones Unidas
programa, las variables se utilizan, y la encarga de pines I/OEl archvo .crn3 inicializa las tareas, las variables y el hardware de / 0
Debera existir un archivo con extensión *.CCD para cada una de las tareas
conforman el programa, cuyo nombre es el aparece en el archivo .crn2
Se desarrollo un programa ejemplo "PARPADEO", cuenta con dos tareas: una enciende y apaga una salida digital e incrementa una variable contador, la otra tarea revisa si la variable es exactamente divisible entre 5 (modulo 5) y enciende el led cuando esta condicion es valida, de lo contrario, lo apagara.
PARPADEO.crn1
En este archivo puede notarse la linea de codigo donde esta el nombre del programa, "PARPADEO". Las demas lineas había algun tipo de encarga de espacios de memoria para el hardware, las variables e I/O. No se notaron cambios en estas lineas para diferentes programas hechos y analizados.
_END NUEVA $$$. EJECUTAR
: NOMBRE DE ARCHIVO. " PARPADEO ";
1 $VAR 0 * _HSV_SEMA
1024 $VAR 0 * _HSV_TEMP
200 0 $VAR * _HSV_INIT_IO
IVAR 0 ^ _HNV_INIT_IO
PARPADEO.crn2
En este archivo se encontraron tres cosas:
-Tareas conforman el programa: Powerup, parpadeolento, _INI_IO. Encendido es una tarea viene por defecto, no puede ser renombrada, ni borrada. parpadeolento fue una tarea creada en el programa e _INIT_IO probablemente es una tarea interna encargada de inicializar el hardware automaticamente al iniciar un programa
-El en de utilizaron de la se de de la variables programa: variablecontador y variablemodulo
-Alias de los pinos del hardware un nombres mas amigables en el programa, en este caso los pines digitales 0 y 7 fueron asignados a los alias: SALIDA_DIGITAL_1 y SALIDA_DIGITAL_4
TAREA 0 & _INIT_IO
TAREA 0 & encendido
TAREA 0 & parpadeolento
IVAR 0 ^ variablecontador
IVAR 0 ^ variablemodulo
$0000000000000000... 32769 1.000000 0.000000 0,010000 2001 $7F000001 MBOARD 0% RACK_PROPIO SPOINT 0.0 0% RACK_PROPIO DE SALIDA
PUNTO 0 ~ SALIDA_DIGITAL_1
SPOINT 0.0 SALIDA 7% RACK_PROPIO
PUNTO 0 ~ SALIDA_DIGITAL_4
PARPADEO.crn3
Este archivo es un poco largo de mas. Al parecer en la parte inicial se crean se agrupan las tareas, los diferentes tipos de variables, en arreglos y hacia finales se el puede ver la inicializacion de las variables variablecontador y variablemodulo a 0. Tambien puede notarse por defecto los pines digitales estan configurados como entrada "0", y los seran usados como salida debera REALISATION un "1" ($... 0081 pinos 0 y 7)
: W_INIT_IO
CONFIG_PORTS
$0000000000000081... % RACK_PROPIO PERMITE!
«% RACK_PROPIO (1/1) "* _HSV_INIT_IO $MOVE 0 ^ _HNV_INIT_IO
% RACK_PROPIO PERMITEN
«Inicialización de variables» * _HSV_INIT_IO $MOVE
0 ^ variablecontador
0 ^ variablemodulo
««* _HSV_INIT_IO $MOVE
Archivos de tareas (powerup.ccd, parpadeo.ccd)
En estos archivos se encuentra el codigo del programa, para cada una de las tareas programadas. En cada archivo se encuentra dos tipos de cosas, hacia el final pueden verse el listado de cada uno de los "bloques" de codigo:
T: T0
DUMMY
0_0
0_1
0_3
0_5
0_7
0_10
T;
y encendido ' T0 SETTASK
Cada uno de estos "bloques" de codigo se encuentra numerado a-b donde a, es el numero de la tarea y b el "id" de dicho bloque de codigo dentro de esta tarea. Estos numeros de bloques corresponden con los numeros de los bloques mostrados en la aplicacion nativa y probablemente son usados para realizar tareas de depuracion paso a paso por bloques. Un ejemplo de un bloque de codigo es el siguiente
: 1_1
VERDADERA
1 LÍNEA. NÚMERO
^ variablemodulo
1 <
TIERRA
SI-4 OTRO -3 DESPUÉS DEL SALTO;
Puede notarse al comienzo la numeracion del bloque antecedida por: (dos puntos). Luego se ve la instrucción línea. NÚMERO antecedida por un numero de linea. Estos numeros de linea corresponde con los numeros de linea de la aplicacion nativa y probablemente son usados para realizar tareas de depuracion paso a paso por lineas.
Puede notarse parte del codigo se asemeja una FORTH en donde primero se nombran los operandos y finalmente se opera con ellos.
El bloque finaliza siempre con una instrucción JUMP precedida permiso de; (punto y coma). Estos no saltan son saltos absolutos, sino relativos.