Vous êtes sur la page 1sur 32

INTRODUCCIÓN A TORNADO

LABORATORIO DE INFORMÁTICA INDUSTRIAL

LABORATORIO DE SISTEMAS INFORMÁTICOS EN


TIEMPO REAL

Curso 2002-2003 Fabián López Valencia


-I-

INDICE

1. Introducción.............................................................................................................. 1

2. Ejecutar Tornado ...................................................................................................... 2

3. Crear un proyecto descargable para VxWorks ......................................................... 3

4. Añadir código fuente al proyecto ............................................................................. 6

5. Generar el módulo objeto del proyecto .................................................................... 7

6. Descargar el módulo objeto del proyecto en el Simulador del target de VxWorks. 9

7. Ejecutar el módulo objeto desde la Shell de Tornado ............................................ 11

7.1 Algunos comandos de la Shell de Tornado .................................................... 14

8. Explorador de objetos del sistema: Browser .......................................................... 17

9. Descripción de una sesión de depuración............................................................... 19

10. Crear una imagen de VxWorks configurada o customizada .................................. 22

10.1 Añadir código fuente al proyecto ................................................................... 24

10.2 Configurar los componentes de VxWorks...................................................... 24

11. Examinar la actividad de las tareas......................................................................... 27

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado -1-

1. Introducción

Tornado es un entorno integrado para el desarrollo cruzado de software. Proporciona un modo


muy eficiente para el desarrollo de aplicaciones, o módulos objeto, de tiempo real embebidas,
con mínima intrusión en el target. Tornado incluye los siguientes elementos:
• VxWorks, un sistema operativo de tiempo real de alto rendimiento.
• Herramientas de desarrollo de aplicaciones (compiladores y programas asociados).
• Un entorno integrado de desarrollo (IDE) que facilita la gestión y el desarrollo de
proyectos, estableciendo y gestionando la comunicación entre el host y el target y
la ejecución, depuración y monitorización de aplicaciones VxWorks.
Las características principales del IDE son:
• Editor de código fuente integrado.
• Facilidades para la gestión de proyectos.
• Compiladores integrados de C y C++ y make.
• Browser: colección de visualizaciones que ayudan a monitorizar el target.
• CrossWind: depurador gráfico a nivel de código.
• WindSh: shell de comandos en lenguaje C que controla el target.
• VxSim: versión integrada de un simulador de target VxWorks.
• Versión integrada de WindView, el analizador lógico para el target.
• Opciones de configuración para muchas de las características, incluyendo
integración de editor alternativo y de herramientas de gestión de la configuración
(CM), así como todo el GUI de Tornado.

El entorno de Tornado está diseñado para suministrar el rango completo de características,


independientemente de si los recursos del target son muchos o pocos. Las principales
capacidades se ejecutan principalmente en un host con acceso compartido a una tabla de
símbolos del sistema target remoto. La Figura muestra las relaciones entre los principales
componentes interactivos de Tornado en el host y en el sistema target. La comunicación entre
las herramientas del host y VxWorks está arbitrada por el server target y el target agent.
HOST SYSTEM TARGET SYSTEM

Shell

Application
Editor Debugger
Target
Server
Project Browser
VxWorks
WindView Target
Agent

VxWorks Target Agent


Agent
Simulator

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado -2-

Con Tornado, el ciclo entre el desarrollo de una idea y la posibilidad de observar su


implementación es extremadamente corto. Se pueden efectuar descargas incrementales del
código objeto de los módulos que son enlazadas dinámicamente con el sistema operativo
VxWorks en un tiempo mínimo.
El lenguaje de macros, llamado Tcl, proporciona un medio consistente para la configuración
de todo el entorno de las herramientas de Tornado.

2. Ejecutar Tornado
Para ejecutar Tornado basta con hacer clic sobre el icono de la aplicación, mediante la
secuencia: botón Inicio > Programas > Tornado2 > Tornado

NOTA: Se puede mover las barras de herramientas y situarlas donde queramos: en los
lados, arriba o abajo (o una junto a otra).
Si, durante el arranque, Tornado no se ha podido conectar al registro de Tornado, preguntará
si se quiere ejecutar el registro.
Al ejecutar Tornado por primera vez, aparece abierta la caja de dialogo Create Project,
existiendo la posibilidad de crear dos tipos de aplicaciones o proyectos:

o Donwlable application

Un módulo objeto descargable, o downlable, consiste en uno o más módulos


objetos relocalizables, que pueden ser descargados y enlazados dinámicamente
al sistema operativo VxWorks, y después se pueden ejecutar desde la shell o
desde el debugger de Tornado. Una característica nueva del entorno de
desarrollo de Tornado es la carga dinámica, que permite cargar objetos en un
sistema en ejecución. Esto proporciona ciclos de depuración mucho más
rápidos, comparándolos con el proceso de tener que volver a generar y
reenlazar el sistema operativo completo. Un módulo objeto descargable puede
consistir en un único fichero, conteniendo una simple rutina “hola mundo”, o
una aplicación compleja consistente en muchos ficheros y módulos que están
parcialmente enlazados como un único objeto (que es creado automáticamente

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado -3-

por la herramienta de proyectos). El módulo objeto tendrá el mismo nombre


que el proyecto, y la extensión out, tal como se describe en este documento.

o Bootable application

Una aplicación arrancable, o bootable, consiste en un modulo objeto enlazado


a un kernel, o imagen, de VxWorks. La imagen VxWorks se puede configurar
para incluir o excluir componentes del sistema operativo, mediante la
activación/desactivación de parámetros del sistema operativo. Una aplicación
arrancable comienza su ejecución cuando el target es arrancado.

3. Crear un proyecto descargable para VxWorks

Si la caja de dialogo de Create Project in New/Existing Workspace no está abierta se puede


abrir mediante la secuencia de opciones de menú: File > New Project.

Al seleccionar la opción: Create downloadable applications for VxWorks, se lanza el


asistente (Wizard), que nos ayuda a seguir los pasos necesarios para crear un nuevo proyecto.
En el primer paso nos pregunta:
• Nombre del proyecto
• Camino y nombre del directorio que se quiere utilizar para guardar el proyecto
• Una descripción del proyecto (es opcional)
• El nombre y la localización del fichero del workspace, el cual contiene información
acerca de espacio de trabajo, incluyendo los proyectos que pertenecen a él.
Un proyecto consiste en código fuente, la configuración de la generación del módulo objeto
(Building settings) y los archivos binarios que se utilizan para generarlo.
Un espacio de trabajo, o workspace, es simplemente la agrupación de uno o más proyectos.
Esto proporciona una forma muy útil de trabajar con material relacionado, compartir código
entre proyectos y asociar módulos objeto relacionados. Una vez que se ha creado un proyecto
en un worksapce, la ventana del workspace muestra información de todos los proyectos que
contiene.
Se puede utilizar el directorio y los nombres por defecto indicados por el asistente, pero es
preferible situarlos en un directorio que no esté colgado del árbol de directorios de la
instalación de Tornado (para que no se borren si se desinstala Tornado).

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado -4-

NOTA: El directorio base para el proyecto y el directorio para el workspace deben existir
antes de crear los ficheros del proyecto y de workspace.

En el segundo paso se presenta una caja de dialogo en la que se debe indicar la toolchain que
construirá el módulo objeto.
Una toolchain es un conjunto de herramientas de desarrollo cruzado, que permiten construir
módulos objeto para un target específico. Las toolchain suministradas con Tornado están
basadas en el preprocesador, compilador, ensamblador y enlazador de GNU. Los nombres por
defecto de las toolchain para simuladores de target tienen la forma SIMhostOSgnu (por
ejemplo SIMNTgnu).

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado -5-

En nuestro caso seleccionaremos la toolchain SIMNTgnu y pulsaremos el botón Next para


continuar. Tras ello, se muestran las opciones seleccionadas en los pasos anteriores, para que
sean confirmadas:

Tras lo cual aparece la ventana del workspace. El título de la ventana incluye el nombre del
workspace y la ventana contiene una carpeta para cada uno de los proyectos del workspace.

NOTA: El menú contextual correspondiente a un objeto se muestra pulsando el botón


derecho del ratón, después de haber seleccionado dicho objeto. Nos permite acceder
a todos los comando que se pueden utilizar sobre el objeto seleccionado.

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado -6-

4. Añadir código fuente al proyecto

Programa fuente:
El programa ejemplo que se va a utilizar
crea una array de números enteros, los
ordena y luego crea otro array de
estructuras con dos campos. Uno de los
campos de la estructura contiene el
número correspondiente del array de
números y en el otro campo una cadena
de caracteres que indica si dicho número
es primo o no.
Si tenemos el código fuente ya editado, con un
editor del tipo ASCII puro, para añadir el código,
basta con seleccionar Add Files desde el menú
contextual en la vista File del workspace y
seleccionar dicho fichero.

Tras seleccionar el archivo Arr_num.c y


podemos abrir la carpeta de Object Modules, en
la vista de Files, para mostrar los nombres de los
ficheros fuente y de los ficheros objeto que se
van a crear a partir de ellos.
Al crear un proyecto, Tornado facilita la creación
automática del fichero projectName.out como un
único módulo, parcialmente enlazado.
El fichero projectName.out, comprende todos
los módulos objeto individuales del proyecto de
la aplicación descargable y facilita la descarga de
todos ellos en el target de manera simultánea.

NOTA: También se puede crear el


fichero del código fuente,
utilizando el editor
integrado en Tornado.
Para ello habría que
seleccionar el submenú
New, del menú Files, o el
icono ; tras lo cual se
abriría una nueva ventana
donde escribir el código
del nuevo archivo.

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado -7-

5. Generar el módulo objeto del proyecto

Para revisar la configuración que se va a utilizar para generar el módulo objeto, debemos
seleccionar la hoja Builds de la ventana del workspace. Seguidamente se debe abrir en ella la
carpeta Ejemplo_Vx Builds y hacer doble-click sobre el nombre por defecto del generador
del módulo objeto (SIMNTgnu).
Mediante el menú contextual de Properties... se pueden ver, y modificar, las reglas del
makefile y las macros, así como las opciones que van a utilizar el compilador, el ensamblador
y el enlazador para generar el módulo objeto.

NOTA: Durante el proceso de desarrollo de un proyecto, es importante seleccionar la


opción de incluir información para la depuración (include debug info, en la hoja
C/C++ compiler).

Para generar el proyecto hay que


seleccionar, en el menú contextual:

Build 'Ejemplo_Vx.out'

La opción Build 'Ejemplo_Vx.out' genera


la aplicación, con todos los módulos del
proyecto como un único y parcialmente
enlazado módulo que está optimizado para
descargarlo al target.
Antes de generar la aplicación se muestra la
caja de dialogo Dependencies, en el que se
indican los ficheros fuente relacionados con
la aplicación.

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado -8-

En el ejemplo, antes de
generar el módulo objeto, la
caja de dialogo
Dependencies nos informa de
que las dependencias para el
fichero makefile todavía no
han sido calculadas para
Ejemplo_Vx.c.

Tras pulsar el botón de OK, Tornado calcula las dependencias para el fichero makefile, y
procede a generar el módulo objeto del proyecto. Si se encuentra alguna dependencia externa,
se incluye automáticamente en el proyecto y es listada en la carpeta External Dependencies,
en la hoja Files de la ventana del workspace.

La ventana Build Output muestra los errores y los avisos. En este caso el compilador ha
detectado una extraña variable, longitud, que se define pero que no se utiliza posteriormente.
Haciendo doble-click sobre la línea del mensaje de error o de aviso se abre, en el editor de
Tornado, el fichero del código fuente con un puntero señalando la línea origen del mensaje:

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado -9-

Tras eliminar la definición de la variable longitud se debe salvar el fichero, pulsando


CTRL+S o mediante la opción del menú File > Save, y volver a generar el módulo objeto.
El editor de Tornado es un editor orientado a lenguaje (por ejemplo, dispone del
reconocimiento y coloreado de los diversos elementos sintácticos) e incluye las capacidades
estándar de Windows para la manipulación de texto.
Finalmente se debe cerrar la ventana Build Output.

6. Descargar el módulo objeto del proyecto en el Simulador del


target de VxWorks

En este punto, desde la hoja Files de la ventana


de workspace, se puede, descargar el módulo
objeto y lanzar el simulador integrado, todo ello
como parte del mismo proceso.

Se debe seleccionar la carpeta con el nombre del


proyecto y en el menú contextual (mostrado con
el botón derecho de ratón) elegir la opción
Download 'Ejemplo_Vx.out'.

Tornado pregunta si se quiere


comenzar a ejecutar el simulador:

Al pulsar el botón de Yes para


continuar, aparecerá la caja de
dialogo de VxSIM-Lite Launch:

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 10 -

Se debe dejar seleccionado el Standard Simulator y pulsar OK para continuar.


La ventana del simulador de target (VxWorks Simulator for Windows) se abre, y Tornado
pregunta si se quiere ejecutar el target server. Pulsando OK, en la caja de dialogo del
VxSIM-Lite Launch, se continúa con el proceso.

NOTA: En cada instante, sólo se puede ejecutar una instancia del simulador integrado del
target VxWorks,(VxSim-Lite (Para terminar la simulación bastará con cerrar la
ventana del VxWorksSimulator).

Un target server gestiona todas las comunicaciones entre las herramientas del host Tornado,
tales como la shell o el debugger, y el target. La convención para los nombres del
server target es targetName@hostName. En el ejemplo el nombre del target es vxsim (el
nombre por defecto del simulador integrado) y el nombre del PC host es badger.
El nombre del target server se muestra en la barra de herramientas de Tornado:
Browser Shell Debugger Simulator

WindView Wind Triggering


Navitagor
La barra de herramientas incluye botones para ejecutar las herramientas de Tornado tales
como Browser, Shell y Debugger. Los botones se activan cuando se lanza la ejecución del
target server.
NOTA: Tanto el botón del Browse como el de la Shell tienen la letra i en ellos, lo cual
puede llevar a confusión. La i en el botón de la Shell va seguido del indicador de la
Shell: ->

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 11 -

7. Ejecutar el módulo objeto desde la Shell de Tornado

Antes de ejecutar el módulo objeto, es útil configurar y ejecutar el depurador de Tornado, de


tal forma que el depurador pueda responder automáticamente a cualquier excepción del
programa.
El depurador o debugger de Tornado (CrossWind) combina características de los depuradores
con interfaz gráfica y los de interfaz de línea de comandos. Las operaciones más comunes
tales como visualizar la traza y otros objetos del programa, poner puntos de ruptura
(breakpoints) y controlar la ejecución de la aplicación están disponibles desde la barra de
herramientas de depuración:

Para configurar el depurador o debugger hay que seleccionar la opción de menú


Tools > Options > Debugger desde la ventana principal de Tornado. En la caja de dialogo
que aparece se debe seleccionar Always en la característica Auto attach to tasks, para que el
depurador se acople automáticamente a la tarea cuando ocurra una excepción.

Pulsando el botón en la barra de herramientas comienza la ejecución del depurador. Tras


unos segundos, la línea de estado, en el pie de la ventana principal, anunciará que el
depurador se está ejecutando:

La shell de Tornado (conocida como WindSh) es un intérprete de comandos de lenguaje C que


permite invocar, desde la línea de comandos de la shell, cualquier rutina que haya sido
cargada en el target. La shell también incluye su propio conjunto de comandos para
manipular tareas, acceder a la información del sistemas, depurar, ...

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 12 -

Para comenzar una shell hay que hacer clic en el botón: .


Cuando se abra la ventana de la shell, para ejecutar el programa bastará con poner en la línea
de comandos el nombre de la rutina principal del programa (ej. main) o de cualquier otro
subprograma o tarea de los módulos cargados.

Desde la shell, se puede llamar a rutinas para mostrar datos en la salida estándar, o para
aceptar datos desde la entrada estándar. Por defecto, la salida estándar y la entrada estándar se
dirigen a la ventana de la Shell de Tornado.
-> printf("Hello World\n")
Hello World!
value = 13 = 0xd
->
Este comportamiento se puede modificar dinámicamente, utilizando el procedimiento
shConfig, tal como se ve en el siguiente ejemplo:
-> ?shConfig SH_GET_TASK_IO off
->
-> printf("Hello World!\n")
value = 13 = 0xd
->
La shell muestra el resultado del comando printf( ), indicando que ha mostrado 13
caracteres. La salida, sin embargo, ha sido redirigida a la salida estándar del target, no
a la shell.

La shell muestra los datos de tipo entero y los de tipo carácter en formato decimal y
hexadecimal, y si es posible, como una constante carácter o una dirección simbólica más un
offset.
-> 68
value = 68 = 0x44 = 'D'

-> 0xf5de
value = 62942 = 0xf5de = _init + 0x52

-> 's'
value = 115 = 0x73 = 's'

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 13 -

Se pueden utilizar casi todos los operadores de C para realizar cálculos, e incluso el operador
paréntesis para forzar el orden de precedencia.
-> (14 * 9) / 3
value = 42 = 0x2a = '*'
Al asignar, mediante una sentencia de asignación, un valor a un identificador no definido (uno
que no esté ya en la tabla de símbolos) la shell crea automáticamente un nueva variable. La
shell reserva espacio para la nueva variable, le asigna el valor indicado en la expresión de la
derecha (de la sentencia de asignación) y muestra un mensaje indicando que se ha creado una
nueva variable y se le ha asignado el valor que se especifica. El tipo de la variable creada es el
correspondiente al tipo del valor asignado.
-> x = 100
new symbol "x" added to symbol table.
x = 0x49aefec: value = 100 = 0x64 = 'd'
->
-> saludo = "Hello world"
new symbol " saludo" added to symbol table.
saludo = 0x49aefac: value = 77262772 = 0x49aefb4 = saludo + 0x8
->

Ejemplo de uso de la shell como intérprete de comandos de C:


Crear dos variables, iUno e iDos, asignarles un valor (11 y 22 respectivamente) y utilizar
la función IntercambiarEnteros, del módulo objeto cargado, para intercambiar sus
valores:

-> iUno = 11 /* crear variable y asignarle valor */


new symbol "iUno" added to symbol table.
iUno = 0x49aeff4: value = 11 = 0xb

-> iDos = 22 /* crear variable y asignarle valor */


new symbol "iDos" added to symbol table.
iDos = 0x49aefec: value = 22 = 0x16

-> iUno /* mostrar el valor de la variable */


iUno = 0x49aeff4: value = 11 = 0xb

-> iDos /* mostrar el valor de la variable */


iDos = 0x49aefec: value = 22 = 0x16

-> IntercambiarEnteros (&iUno, &iDos) /* llamar a la función */


value = 77262828 = 0x49aefec = iDos

-> iUno /* mostrar el valor de la variable */


iUno = 0x49aeff4: value = 22 = 0x16

-> iDos /* mostrar el valor de la variable */


iDos = 0x49aefec: value = 11 = 0xb
->

Para finalizar la ejecución de la shell se puede ejecutar el comando quit o bien cerrar la
ventana de la shell.

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 14 -

7.1 Algunos comandos de la Shell de Tornado

help Muestra una sinopsis de algunos comandos.


HTML Help

Escribiendo cualquier nombre de comando, un espacio, y CTRL+W se abre el


browser y se muestra la página HTML de referencia de dicho comando.

-> i [CTRL+W]

quit o exit Cierra la shell (WindSh).

reboot Rearranca el target y el servidor se conecta de nuevo con él. Al cabo de


un segundo se reinicia la shell.

version Muestra información de la version de VxWorks.

h [size] Muestra el histórico de la shell o modifica su tamaño.


El valor inicial de size es 20.

pwd Muestra el directorio por defecto actual.

cd "path" Cambia el directorio por defecto.

ls ["path"[, long] ] Lista el contenido del directorio (1 listado largo y 0 listado corto).

lkup "substr" Lista símbolos.


Lista todos los símbolos, de la tabla de símbolos del sistema, cuyos nombres
contienen la subcadena indicada en la línea de comandos, substr. Si substr es una
cadena vacía (""), se muestran todos los símbolos de la tabla de símbolos.

period secs, funct, args… Crea y arranca una tarea que ejecuta una función periódicamente.
Crea y arranca una tarea que repetidamente llama a una determinada función, funct,
residente en el target, a la que se le pueden pasar hasta 8 parámetros (arg1, arg2,
arg3,…), con un retardo, entre llamadas, igual al número de segundos indicado en la
línea de comandos, secs.
-> period 2, main

repeat n, funct, args, … Crea y arranca una tarea que ejecuta una función repetidamente.
Crea y arranca una tarea que llama a una determinada función, funct, residente en el
target, un número determinado de veces, n. A la función functr se le pueden pasar
hasta 8 parámetros (arg1, arg2, arg3,…). Si n es 0, la función se ejecuta
continuamente o hasta que la tarea sea eliminada.
-> repeat 2, main
-> repeat 1, IntercambiarEnteros, &iUno, &iDos

i [task] Muestra un resumen del TCB de cada una de las tareas.


ti [task] Muestra la información completa del TCB de cada una de las tareas.
Estos comandos (y el siguiente) muestran información de todas las tareas del sistema,
o de la tarea especificada en la línea de comando.

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 15 -

iStrict [task] Muestra un resumen del TCB de cada una de las tareas, tomada como
en una instantánea.
El resultado de la ejecución de este comando es idéntico al del comando i, pero se
garantiza la consistencia de los datos al tomarse todos los datos en una única
transacción del target.
Estos comandos (i, ti, iStrict) se deberían utilizar únicamente como ayuda a la
depuración, puesto que la información ya es obsoleta en el instante de ser mostrada.
-> i

NAME ENTRY TID PRI STATUS PC SP ERRNO DELAY


---------- ---------- -------- --- --------- ------- -------- ----- --
tExcTask _excTask 20fcb00 0 PEND 200c5fc 20fca6c 0 0
tLogTask _logTask 20fb5b8 0 PEND 200c5fc 20fb520 0 0
tRlogind _rlogind 20f3f90 2 PEND 2038614 20f3db0 0 0
tTelnetd _telnetd 20f2124 2 PEND 2038614 20f2070 0 0
tNetTask _netTask 20f7398 50 PEND 2038614 20f7340 0 0
value = 57 = 0x39 = '9'
NOTA: Los argumentos especificados como task pueden ser tanto el nombre como el ID de
la tarea.

Cargada sólo la imagen de VxWorks

Cargado el debugger y el módulo o aplicación main

sp funct, args, … Crea y lanza una tarea, con parámetros por defecto.
sps funct, args, … Crea y lanza una tarea, con parámetros por defecto, y la deja suspendida.
Este comando crea y lanza una determinada tarea (que ejecuta una función, funct) con
los siguiente valores por defecto:
Prioridad: 100
Tamaño de la pila o stack: 20,000 bytes
Identificador de la tarea (taskID): el número más alto de los no utilizados
Opciones de la tarea: VX_FP_TASK ( ejecuta con soporte para el
coprocesador de punto flotante)
Nombre de la tarea: El nombre es de la forma sXuN, donde X es el
número de la shell y N un numero entero que se
incrementa para cada tarea creada. Por tanto los
nombres de las tareas serán: s1u1, s1u2, s5u3, etc.
El identificador de la tarea (task ID) es mostrado tras crearse y lanzarse la tarea.
-> sp main
-> sp IntercambiarEnteros, &iUno, &iDos

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 16 -

td task Elimina una tarea.


tr task Reactiva una tarea.
ts task Suspende una tarea.

NOTA: Los argumentos especificados como task pueden ser tanto el nombre como el ID de
la tarea.

? shConfig Muestra o cambia el comportamiento de una sesión específica de la shell

Mostrar la configuración actual de la shell:


-> ? shConfig
DSM_HEX_MODE = off
LD_CALL_XTORS = target
LD_COMMON_MATCH_ALL = on
LD_PATH = .
LD_SEND_MODULES = on
SH_GET_TASK_IO = on

Mostrar la configuración actual de un parámetro:


-> ?shConfig SH_GET_TASK_IO
SH_GET_TASK_IO = on

Cambiar la salida y la entrada. Poner la entrada y salida estándar del target, en lugar de que sea
la shell:
-> ? shConfig SH_GET_TASK_IO off

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 17 -

8. Explorador de objetos del sistema: Browser

El Borwser es un visor de objetos del sistema. Es un componente gráfico de la shell que


proporciona facilidades para monitorizar el estado del target, incluyendo resúmenes de las
tareas activas del sistema y de la aplicación, asignación y uso de la memoria, resumen del
actual mapeo de la memoria del target,…
Utilizando el browser también se puede examinar:

• Información detallada de las tareas


• Semáforos
• Colas de mensajes
• Particiones de la memoria
• Timers de tipo Watchdog
• Uso de la pila por parte de todas las tareas del target
• Uso de la CPU del target por parte de las tareas
• Información de los módulos: estructura y símbolos
• Vectores de interrupción

Hay dos formas de ejecutar el browser: Desde el icono de la barra de herramientas o


desde la opción Browser del menú Tools.
Cuando se abre la ventana del browse, se debe seleccionar, en la lista desplegable, la
información que se desea mostrar (Memory Usage, Target Information, …). La información
mostrada se obtiene en un instante determinado y único, pero se puede actualizar
interactivamente, pulsando el botón , o se puede configurar el browser, pulsando el botón
, para que la información mostrada automáticamente se actualice en intervalos
determinados. Para que la información se refresque automáticamente o interactivamente basta

con pulsar el botón

Memory Usage:

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 18 -

Target Information Stack Check

Spy Chart

Module Information:

Tasks

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 19 -

9. Descripción de una sesión de depuración

Para comenzar un sesión de depuración, en primer lugar hay que descargar el modulo que se
quiere depurar, tal como se ha descrito en el apartado 6, “Descargar el módulo objeto del
proyecto en el Simulador del target de VxWorks”.
Seguidamente se debe comenzar la ejecución del depurador o debugger desde el menú
Debbug > Run (F6) o desde el botón . Tras lo cual se activa la barra de herramientas
del depurador:

Ejecutar una rutina bajo el control Terminar la ejecución de la actual


del depurador. subrutina.

• Ejecutar hasta la línea actual del


Parar el depurador. código fuente (donde se coloca el
cursor):
Poner/quitar punto de ruptura mediante menú contextual
(Toggle breakpoint).
Watch. Mostrar el valor de una
Interrumpir la ejecución del variable determinada.
módulo.
Mostrar todas las variables locales.
Continuar con la ejecución.
Mostrar los registros del target.
Ejecutar la siguiente línea de
código. Si es la llamada a una Mostrar la traza del programa,
subrutina pasa a ejecutar la primera desde el módulo inicial hasta la
línea de la misma. subrutina actual (muestra la
información de la pila).
Ejecutar la siguiente línea de
código. Si es la llamada a una Mostrar la memoria del target.
subrutina la ejecuta por completo.

Al pulsar el botón se muestra


el cuadro de dialogo para seleccionar
la rutina que se quiere depurar (por
ejemplo main).
NOTA: Se debe activar la opción
de que se detenga la
ejecución al inicio de la
misma.

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 20 -

Seguidamente se muestra el código del módulo:

Siguiente línea del módulo


que se ejecutará

Se puede abrir la ventana de la traza del programa pulsando el botón :

Y la ventana de las variables locales, pulsando :

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 21 -

Por ejemplo, se pueden poner puntos de ruptura al inicio de cada llamada a subprograma para
ir viendo la ejecución del mismo, así como los valores que van tomando las variables locales
a main:

Puntos de ruptura

En el ejemplo, la variación de los valores de las variables locales a main en los sucesivos
puntos de ruptura:

Al inicio de la ejecución: Tras la llamada a Tras la llamada a Tras la llamada a


LlenarListaNumeros: OrdenarListaNumeros: LlenarListaEstructuras:

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 22 -

La traza del programa en el instante en que se comienza a ejecutar el subprograma


LlenarListaNumeros es:

En la ventana del simulador de target (VxWorks Simulator for Windows) se puede ir viendo el
resultado de la ejecución del programa (simula la consola del target1):

10. Crear una imagen de VxWorks configurada o customizada

Si la caja de dialogo de Create Project


in New/Existing Workspace no está
abierta se puede abrir mediante la
secuencia de opciones de menú:
File > New Project.

Se ejecuta entonces el asistente de Tornado, que nos ayuda a seguir los pasos necesarios.

1
Para redireccionar la salida a la consola se debe ejecutar el comando:? shConfig SH_GET_TASK_IO off

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 23 -

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 24 -

10.1 Añadir código fuente al proyecto

Se añade el código fuente al proyecto, tal como se


describe en el apartado 4 “Añadir código fuente al
proyecto”
Pero, en este caso, al seleccionar la hoja Files de la
ventana del workspace, automáticamente se han
añadido una serie de ficheros relacionados con la
imagen de VxWorks.

10.2 Configurar los componentes de VxWorks

Al seleccionar la hoja VxWorks de la


ventana del workspace se muestran todos los Desplegando los componentes:
componentes de VxWorks disponibles para operating system components
este target. ANSI C components (libc)

• Los nombres de los componentes que


están seleccionados para su inclusión
aparecen en negrita.
• Los nombres de los componentes que
están excluidos aparecen en texto
plano.
• Los nombres de los componentes que
no han sido instalados aparecen en
cursiva.
• Los nombres de las carpetas
aparecen en negrita si alguno (no
necesariamente todos) de sus
componentes están incluidos.

Se puede seleccionar un componente directamente (o buscarlo mediante el menú contextual) y


tras ello incluirlo, excluirlo, configurarlo, ...

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 25 -

Eliminando la librería POSIX clocks:

Se nos informa de que se va a excluir otro/s


componentes:

Añadiendo la librería POSIX semaphores:

Se nos informa de que se va a incluir otro/s


componentes:

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 26 -

Si se incluyen componentes que


potencialmente presentan un conflicto entre
ellos, Tornado informa de ello mostrando un
mensaje e iluminando el camino completo
hasta la fuente del conflicto.
Ejemplo:
En: development tool components
symbol table components
1º incluimos: built-in symbol table
2º incluimos: downloaded symbol

Seleccionando el
nombre del
proyecto, en
cualquiera de las
vistas del
workspace, y
seleccionando
Properties, en el
menú contextual,
se puede ver el
tamaño total de
los componentes
del kernel, o
imagen, de
VxWorks.

Posteriormente se
debe seleccionar
el tipo de kernel,
o imagen,
VxWorks que se
desea:
• vxWorks
• vxWorks-rom
• vxWorks-
romCompress
• vxWorks-
romResident

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 27 -

Finalmente se genera el módulo objeto, del mismo


modo que las aplicaciones descargables (tal como se
ha descrito en el apartado 5, “Generar el módulo
objeto del proyecto”), mediante la opción
correspondiente del menú contextual.

11. Examinar la actividad de las tareas

WindView es un analizador de Tornado para aplicaciones de Tiempo Real. Es una


herramienta de visualización dinámica que suministra información de los cambios de contexto
y los eventos que los originan, así como información de objetos tales como semáforos, colas
de mensajes y watchdog times.
Para mostrar la actividad de las tareas se va a utilizar el programa cobble.c que está situado en
el directorio: c:\tornado\target\src\demo\start y que contiene rutinas tales como progStart
(que lanza la ejecución de 4 tareas: tCosmos, tSchlep, tMonitor, tCrunch), progStop, ...

Tras descargar en el simulador el código y una vez lanzada la ejecución de la rutina progStart

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 28 -

Basta con pulsar el botón de WindView , en la


barra de Tornado, para abrir la ventana de control de
WindView:

Se puede seleccionar los eventos que se desean capturar para posteriormente mostrarlos:

Pulsando botón GO , en la ventana de


control de WindView, se comienza a guardar
datos.

Tras unos segundos, se debe pulsar el botón de

actualizar, , para actualizar la información


mostrada:

Una vez alcanzado aproximadamente un porcentaje del 50%, se pulsa el botón de STOP
para detener el almacenamiento de datos.
Antes de cargar los datos de WindView desde el simulador del target al host, hay que parar el
programa, ejecutando progStop en la línea de comandos de la Shell.

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 29 -

Finalmente, mediante el botón para se cargan los datos en WindView. Cuando la carga se
haya completado se mostrará una ventana gráfica similar a la siguiente:

Se activa, entonces, la barra de tareas de WindView:


Zoom in Zoom out Zoom 100% Factor de Zoom

Analyze

Filter events Hide nonexecuting status Track incoming events

Se puede filtrar la información mostrada, y , realizar búsquedas de eventos, ,


realizar análisis del uso de la CPU o del memoria, , utilizar los botones de zoom para

aumentar o disminuir el tamaño de lo mostrado, , realizar mediciones entre


instantes, …

Se puede configurar WindView (por


ejemplo el color del fondo, mediante la
secuencia de opciones de menú:
Tools > WindView > Option

Informática Industrial Sistemas Informáticos en Tiempo Real


Introducción a Tornado - 30 -

Por ejemplo, seleccionando como eventos a capturar Task State Transition, configurando el
fondo de la pantalla como blanco, Tools > WindView > Option > White Background, y
aumentado el zoom…

Los eventos se muestran mediante


símbolos. Por ejemplo las banderas
indican los semáforos, las líneas el
estado de ejecución de las tareas...

Para obtener información acerca


del significado de los iconos de
WindView se debe seleccionar la
opción de menú:
Help > WindView Help > Legend

Informática Industrial Sistemas Informáticos en Tiempo Real