Sistemas informáticos en tiempo real Práctica 3 Manejo de

Anuncio
Sistemas informáticos en tiempo real
Práctica 3
Manejo de interrupciones
Objetivo
•
Aprender a utilizar las facilidades proporcionadas por el S.O. para manejar las
interrupciones de teclado y timer.
Práctica
El objetivo de esta práctica será construir un contador de 2 dígitos que se
mostrará en pantalla y cuya velocidad será programable, de forma que en el momento
inicial se actualizará con un periodo de un segundo. Sin embargo cada vez que se pulse
la tecla “+“ se incrementará el período en 0,1 segundo, mientras que si se pulsa la tecla
“–“ se decrementará el período en 0,1 segundo. Para salir del programa se pulsará la
tecla “e”. Además el contador tendrá las siguientes teclas de control:
Tecla “i”: inicio del contador
Tecla “s”: parada del contador
Tecla “c”: continúa desde la parada
Tecla “e”: salida del programa
Indicaciones
•
•
•
•
•
Se utilizarán las rutinas Callback del Kernel ETS.
Este programa será una ampliación de la práctica anterior donde se aprendió a
utilizar la rutina callback de interrupción de teclado.
La rutina Callback del timer se llama cada 10ms por defecto.
La estructura ETS_TIMER_EVENT_RECORD la utilizamos si lo creemos
necesario ya que el kernel ETS no escribe nada en ella. Debemos ser nosotros quien
la escribamos si lo deseamos así. Nosotros también podemos tener nuestras propias
variables globales para escribir lo que deseemos cuando se produzca esta
interrupción, lo que se recomienda para esta práctica.
Respecto a la pantalla, para conseguir que en cada escritura se reescriban los valores
anteriores, podéis utilizar la función printf("\b") que mueve el cursor una posición a
la izquierda. Si lo hacemos dos veces antes de cada escritura sobreescribiremos los
valores anteriores. La manera de como escribir directamente en la memoria de vídeo
lo dejaremos para posteriores prácticas.
Sistemas informáticos en tiempo real
Práctica 4
Manejo de interrupciones
Objetivo
•
•
Aprender a utilizar las facilidades proporcionadas por el S.O. para manejar las
interrupciones de teclado y timer.
Aprender la manera de hacer llamadas indirectas a funciones utilizando punteros.
Práctica
El objetivo de esta práctica será realizar un pequeño gestor de temporizaciones.
Funcionará de forma que se podrá solicitar una temporización en numero de "tics" del
sistema y nos avisará a la función que le indiquemos una vez se haya cumplido este
tiempo.
Cuando se solicite un tiempo determinado se realizará llamando a la función:
delay_time(parametro1,parametro2); donde parámetro1 será la función a la que se llame
una vez se haya cumplido esta temporización y parámetro2 será el número de tics que
deben pasar antes de llamar a la función del parámetro1.
Indicaciones
•
•
•
•
•
La rutina Callback del timer se llamará cada vez que se produzca una interrupción
del timer que se produce a una frecuencia fija. Cada vez que se produce la
interrupción tendremos un tic. Se tratará de contar cuantas veces se entra en esta
interrupción.
Se recomienda declarar dos matrices globales donde se guarden las temporizaciones
solicitadas y la función a la que se debe llamar. Cada vez que se produzca una
interrupción se decrementarán los tics almacenados hasta que alguno llegue a cero,
entonces se hará una llamada a la función correspondiente. Una vez que se ha
retornado de esta función se debe quitar de la lista para que no se vuelva a llamar.
Para comprobar el gestor de temporizaciones se realizará un programa que solicite
desde teclado, o bien desde la propia aplicación, varias temporizaciones, mostrando
en pantalla un mensaje cuando se haya cumplido esta temporización.
Téngase en cuenta que el programa no debe finalizar, por lo que lo constará de un
bucle infinito, para aquellos que introduzcan el valor de la temporización desde el
propio código, o finalizar tecleando una tecla concreta para los que hayan optado
por recoger las temporizaciones desde el teclado.
Se aconseja realizar primero el programa fijando el valor de la temporización desde
el propio código y posteriormente introduciendo el valor de temporización desde el
teclado si se desea completar el programa.
El siguiente párrafo muestra como se utilizan las referencias indirectas a funciones en
C. Es decir como llamar a una función no por el nombre sino por su dirección:
Llamadas a funciones utilizando punteros a funciones (1 de 3)
Llamadas a funciones utilizando punteros a funciones (2 de 3)
Llamadas a funciones utilizando punteros a funciones (3 de 3)
Descargar