II75. Sistemas de Tiempo Real Programación en RT

Anuncio
II75. Sistemas de Tiempo Real
Programación en RT-Linux
Introducción
En esta práctica se va a realizar otra implementación práctica con técnicas de programación en tiempo real,
utilizando conceptos vistos de tareas periódicas, acceso a recursos hardware, manejo de interrupciones y
comunicación entre tareas a través de FIFOS y/o otros mecanismos.
En particular, la práctica trata de realizar una comunicación en tiempo real entre dos ordenadores conectados por el
puerto paralelo, a través del protocolo descrito en las secciones siguientes. También se propone el mismo ejercicio
pero simulando la interacción hardware, que igualmente utiliza conceptos como los descritos anteriormente.
Driver para comunicación bi-direccional a través de un puerto paralelo.
Opción 1. Utilización del hardware del puerto paralelo.
El driver para la gestión de la comunicación a través del puerto paralelo conectando dos ordenadores deberá
gestionar la comunicación utilizando las líneas de datos e información de estado y control que se muestran en la
siguiente figura.
BUSY
STROBE
BUSY
STROBE
ACK
SELECT PRN
AKC
SELECT PRN
DATOS
El funcionamiento de la comunicación consistirá en los siguientes principios:
1. Al inicializar el driver, el bit de la línea de STROBE deberá estar a “0” y se habilitará la
interrupción de ACK.
2. Cuando se quiera enviar un dato, se comprobará que la línea está libre, BUSY=0, y se colocará a “1”
la línea de STROBE para indicar al otro lado que se ocupa la línea. Para liberar la línea se pondrá la
señal de STROBE a “0”.
3. Para generar una interrupción al otro lado, se pondrá el bit de SELECT PRINTER a “0” durante un
cierto periodo de tiempo, poniéndolo a “1” de nuevo para poder generar un flanco de bajada.
4. Para recoger el dato del puerto, se debe pasar a modo bi-direccional y, una vez leído, volver a modo
normal para devolver las líneas de control y de estado a modo funcionamiento estándar.
El driver consistirá en:
1. Una función manejadora de la interrupción, que una vez leído el dato del puerto, lo colocará en una
FIFO, para que lo pueda leer otra tarea RT o proceso Linux. Esta FIFO representará el buffer de
recepción de datos a recoger por la aplicación.
2. Una tarea periódica de periodo T, que en cada periodo compruebe si la línea esta libre. Si está libre,
consulte si hay un dato disponible en otra FIFO que representará el buffer de datos de emisión. Si
hay dato disponible, lo sacará de la FIFO y lo enviará al puerto de datos según el principio de
funcionamiento indicado anteriormente.
Se implementará una aplicación de “talk” entre dos ordenadores consistiendo en dos procesos Linux, uno
para mostrar lo que se recibe y otro para enviar a la FIFO de emisión lo que se quiere enviar al otro ordenador.
Como sugerencia para una implementación sencilla, cada proceso se puede implementar en sendos programas
1
independientes. Para comprobar su funcionamiento, se ejecutarán simultáneamente cada uno en un terminal de texto
diferente (si se utiliza el entorno gráfico, se puede ejecutar cada uno en una ventana y poder ver al tiempo el texto
que se va recibiendo y que se va enviado).
Opción 2. Simulación del funcionamiento del puerto paralelo.
Si no se dispone de dos ordenadores o de un cable configurado según el esquema anterior, se puede simular el
comportamiento del puerto paralelo y de la interrupción de la siguiente forma:
1. Enviar una señal de ACK al otro PC mediante la línea SELECT PRINTER se simulará escribiendo
un dato cualquiera en una FIFO, Dicha FIFO representará la interrupción del puerto paralelo del
puerto del otro PC al que se le envía la señal.
2. La función manejadora de la interrupción generada por el flanco de bajada de ACK se simulará
mediante una función manejadora de la FIFO que representará la interrupción.
3. Crear una estructura de datos que represente la conexión entre los dos puertos, con un campo de tipo
byte que represente el puerto de datos y otro campo de tipo booleano, por ejemplo, que simule la
línea de STROBE-BUSY.
La simulación del funcionamiento de dos ordenadores se realizará implementado en módulos diferentes cada
una de las tareas y procesos que simulen un ordenador. Se puede utilizar un tercer módulo que puede representar la
conexión de los puertos paralelos, donde estará situada la estructura de datos que representa la conexión entre los
dos puertos.
El resto del esquema de funcionamiento, incluyendo la utilidad de “talk”, se implementará de la misma forma
según las especificaciones descritas en la Opción 1.
2
Apéndice. El puerto paralelo
El puerto paralelo está controlado desde el PC por tres registros de 8 bits. Hay un registro de datos (0x378), uno de
estado (0x379) y otro de control (0x37A).
Escribiendo en el registro de control se puede programar el funcionamiento del puerto. De los 8 bits del
registro, el bit 4 de IRQ, representa la activación/desactivación de la interrupción que genera la señal de ACK en el
puerto de estado. Escribiendo un "1" en este bit, el hardware del puerto paralelo generará una interrupción
(normalmente la número 7) cuando detecte que la línea de estado ACK pasa de nivel alto (5 voltios, “1” lógico) a
nivel bajo (0 voltios, “0” lógico).
En un puerto paralelo bi-direccional, es decir, que puede tanto leer como escribir datos (EPP Enhaced
Paralell Port), se puede habilitar el modo bi-direccional escribiendo un “1” en el bit número 5 del puerto de control.
Habilitando este bit, leyendo el registro de datos nos dará el valor que figura en esos momentos en las líneas de
datos del cable conectado al puerto. No obstante, al pasar a este modo, solo se pueden leer datos de entrada, por lo
que debe pasarse a modo normal para poder enviar datos por el puerto. Además, activando el modo bi-direccional, el
funcionamiento de otras líneas de control y estado varían (ver documento sobre funcionamiento del puerto paralelo
en la página web de la asignatura).
El puerto de control también posee un bit, el número “0” de STROBE, que puede ser de entrada y salida,
dependiendo del modo de funcionamiento del puerto. Este bit puede utilizarse como bit de salida para indicar que
existe un dato disponible en el puerto, y por tanto indicar si está la línea ocupada con un dato. El bit 3 del puerto de
control, SELECT PRINTER, se puede utilizar también como línea de salida. Escribiendo en este bit, el valor
aparece en la patilla correspondiente del conector del puerto paralelo.
El registro de datos es una puerta directa a las patillas del conector. Cualquier dato que escribamos en ese
puerto, aparecerá en las patillas 2 a 9 del conector paralelo. Este puerto es sólo de salida, pero cuando el puerto se
encuentra en modo bi-direccional anteriormente descrito, funciona como puerto de entrada, pudiendo leer el dato
que en esos momentos está en el puerto de datos.
El puerto de estado refleja el estado de las líneas de control con la impresora. Mediante estas líneas la
impresora es capaz de informar al ordenador sobre el estado en el que se encuentra. Son líneas que gestiona la
impresora (o dispositivo externo) y que lee el ordenador, por tanto son líneas de entrada. Aunque el registro es de 8
bits, solo los 5 bits de mayor peso están conectados a las líneas, los otros tres bits están siempre a cero. Los nombres
de las líneas tienen su origen en la función que desempeñan cuando se utilizan para comunicarse con una impresora,
pero realmente estas líneas son unas entradas digitales genéricas que se pueden utilizar para casi cualquier cosa.
De estas 5 líneas la más interesante es la patilla 10 (bit 6 del registro), pues además de servir como línea de
entrada digital, también se pueden producir interrupciones cuando la línea cambia de estado (de 5 voltios a 0), tal
como se comentó en párrafos anteriores. En un puerto en modo bi-direccional, la línea SELECT, bit número “4” del
puerto de estado, es de salida, por lo que puede también utilizarse para poder sacar algún tipo de información. Como
línea de entrada se puede utilizar el bit 7 del puerto de estado, BUSY. Leyendo este bit se puede ver el valor que
aparece en la correspondiente patilla del conector del puerto paralelo.
3
Descargar