Introduccin
rio, con dos fuentes de entrada series asincrnicas capaces de ejecutar hasta Alguna vez dese tener un Kernel de 19.200 baud junto con siete sensores que Tiempo-Real para la familia PIC16CXXX de deben estar "indicados" como entradas microcontroladores? O quiso averiguar (vea el captulo 5). Se debe manejar otra de qu se tratan las Multitareas o los Enca- lnea de entrada que cause un "r econ jes? Si la respuesta es positiva, este captu- teo" del software interno. Para la salida, lo est dirigido a usted. Le ensearemos a este ejemplo tiene un LED que muestra implementar todas las caractersticas de ocho estados internos diferentes de la un gran Kernel Multitareas de Tiempo-Real "Alar ma Remota", la cual titila a diferenRemota" en poco espacio y sin ocuparnos de los tes promedios y secuencias. Esta salida sekernels existentes. Con una planificacin rie y asincrnica es capaz de ejecutarse a adecuada, y usando las tcnicas que des- 38.400 baud y las entradas pasan a la sicribiremos en este libro, podr construir su guiente estacin de la alarma remota. Se propio kernel de tiempo-real rpido con incluyen distintos temporizadores cortos y las caractersticas necesarias para hacer largos para cumplir con las nueve tareas cualquier tarea. cooperativas de este ejemplo. Por si no recuerda, se denomina baud a la transmisin de un byte por segundo. Qu es el Kernel? El segundo ejemplo se implement con un PIC16C64 para formar un Kernel SemiKernel es la palabra que se utiliza para Prioritario conducido por interrupcin. Este describir parte de "un sistema operativo" o ejemplo transforma las rutinas series de enel sistema operativo completo con el que trada y salida del primer ejemplo en Rutiopera un microcontrolador o una compu- nas de Servicio de Interrupcin (ISR) para tadora. En muchos artculos, en lugar de obtener mayor velocidad y precisin. emplear el trmino "Ker nel" empleo la palabra "entor no", sin embargo, aqu emno" plearemos el trmino en ingls que no poQu es un PIC? see traduccin directa. En la Nota AN585 de Microchip (gran Los circuitos integrados programables parte de la bibliografa consultada para (Programmable Integrated Circuits = PIC) redactar este texto es de la empresa Mison componentes sumamente tiles en la crohip) se incluyen dos ejemplos primordia- Electrnica de Consumo. An cuando son les: uno basado en el PIC16C54 y otro en conocidos desde hace ms de veinte el ms poderoso PIC16C64. Se implement aos, existen en la actualidad nuevos tipos una "Alar ma Remota" con el PIC16C54 que cumplen con una serie de requisitos y como un ejemplo de un Kernel No-Priorita- caractersticas sumamente tiles.
Figura 1
Figura 2
memoria de programa EEPROM de 1K x 14, un stack de hardware de 8 niveles, 13 lneas bidireccionales I/O, 3 fuentes de interrupt, temporizador de 8 bits de tiempo Algunos tipos de PIC real con un prescalador programable de 8 Un representante tpico de los PICs es el bits y una frecuencia operativa de DC a 20MHz. El integrado viene tambin en una tipo PIC 16C84, cuya base se observa en la figura 2. Se trata de un procesador con versin de montaje en superficie (surface mount). una memoria de programas EEPROM de El esquema bsico de este procesador 1k x 14. Tiene 64 bytes de memoria de datos EEPROM y 36 bytes de RAM de uso ge- surge de la figura 3 y es similar al del PIC 16C84. neral. La memoria de programa del EEUn procesador de mayor envergadura y PROM puede ser programada en serie en el circuito de aplicacin. Se dispone de 13 mayor tamao es el tipo PIC 16C74, cuyo pines de I/O con control de direccin indiFigura 3 vidual. Se dispone de 4 fuentes de interrupt interno/externo. El temporizador/contador es de 8 bits con un prescalador programable. La frecuencia de operaciones es de DC a 10MHz. El integrado viene con una base PDIP de 18 pines o SOIC. Una variante del anterior es el integrado PIC 16C61 con base similar y con una
Qu significa que el Kernel es Multitarea? Significa que es posible "atender" varias tareas al mismo tiempo (en apariencia). Cada tarea cree que es la propietaria de la CPU, pero esta
Seccin Crtica
Una seccin crtica es una estructura de datos compartidos, un recurso compartido, una seccin de tiempo crtico de cdigo, o una seccin no-reentrante de cdigo que slo puede tener un "dueo" que pueda ver, cambiar o usar esta seccin en cualquier tiempo especfico. Estas secciones no deben ser interrumpidas durante el proceso de actualizacin. Deben ser protegidas para que no puedan acceder a ellas otras tareas que cambien los indicadores o los datos o modifiquen el hardware al mismo tiempo. Si dos tareas acceden a una seccin crtica al mismo tiempo, los datos cambiarn a tal Recursos Compartidos punto que se originar un "soberano de sastr e". Las estructuras de datos, las pantallas, el Cuando realice una aplicacin debe hardware I/O, y las rutinas no-reentrantes asegurarse que las secciones crticas sean pequeas, y que tengan tiempo para que sean "atendidas" las interrupciones pendientes. Los programadores RT tendrn muchos problemas si no comprenden las secciones crticas. Aun sin interrupciones, debe proteger las variables que cambian fuera de tiempo, como la variable de byte Figura 5 conformado xmt_byte, usada en el ejem-
10
El planificador (usamos este trmino para familizarizar al principiante con las diferentes tareas que se realizan) es la parte de un kernel que decide cul es la siguienInterrupcin de te tarea a ejecutarse. En esta seccin nos Contexto/Interrupcin de Tarea referiremos a distintos tipos comunes de planificadores. Es aqu donde se realiza la Cuando una tarea se hace cargo de otra tarea, los valores actuales de los regis- planificacin antes de iniciar la constructros de la CPU para la tarea en ejecucin cin de un nuevo dispositivo. Al comprender los diferentes tipos de sern guardados y los viejos registros guarplanificadores, y sus caractersticas y prodados para la nueva tarea sern realmacenados. La nueva tarea contina donde blemas especficos, podr saber cul es el fue recogida. Todo esto lo realiza la parte que ms se ajusta a sus necesidades. En el ejemplo del PIC16C54 se muestra la anula"Interrupcin de Contexto del Kernel de Tiempo-Real". Usualmente cada tarea tie- cin de las Tareas #1-3 justo antes de la ejecucin de una larga secuencia del cne una "rea de almacenaje para intedigo. rrupcin de contexto". Se pueden implementar otras tcnicas Cada SP de una tarea (Indicador de Acumulacin que indica su propia acumu- ms creativas, pero asegrese de permitir que todas las tareas se ejecuten a su debilacin) se guarda all junto con todos los do tiempo. otros registros importantes guardados. El Vea en la Figura 5 cmo cada tarea ejemplo de la "Alar ma Remota" no necesita usar una interrupcin de contexto por- debe estar en "Estado Pr eparado" o "Es tado en Ejecucin" para que pueda ser que todos sus registros importantes son Ejecucin considerada por el planificador a fin de adecuadamente liberados antes de la fique tenga el control temporario de la sinalizacin de cada tarea. guiente CPU. El ejemplo del PIC16C64 usa un con-
11
12
Reentradas En un Kernel Prioritario, dos o ms tareas pueden pretender la utilizacin de una misma subrutina. El problema es que no se puede controlar cundo se remueve una tarea para que otra tome su lugar. Cuando una subrutina usa slo variables locales o almacenadas en las acumulaciones de cada tarea, este proceso se denomina reentrada o "rutina pura". En una rutina pura no se pueden usar variables o hardware globales. Este requerimiento de la reentrada conduce a considerar toda la subrutina como una seccin crtica.
Prioridad de Tarea Todas las tareas no se crean de la misma manera. Ciertos trabajos deben realizarse a tiempo para que no se pierdan determinados datos. Por lo tanto, debe seleccionar segn este criterio cules son las tareas de mayor prioridad para hacer una escala de mayor a menor. Algunos kernels hacen que la prioridad de cada tarea sea diferente. La determinacin de la prioridad requiere una cuidadosa planificacin antes de la codificacin del trabajo de diseo.
Semforos (banderitas) Hay bsicamente dos tipos de semforos: binario y contador. El semforo binacontador rio permite nicamente un usuario, y todas las tareas que desean acceder a l debern esperar. El semforo contador tiene una lista de usuarios que necesitan acceso. Los semforos se pueden usar de muchas maneras. Puede implementar semforos contadores con semforos binarios.
Inversiones de Prioridad y Prioridades Estticas vs. Dinmicas Para los kernels de Tiempo-Real ms complicados, se usan tareas y prioridades estticas. Algunas veces se usan prioridades dinmicas para solucionar detencio-
13
14
Colas de Mensaje Esta caracterstica tambin es muy buena si tiene tiempo de ejecucin y RAM para implementarla. Las colas estn relacionadas con las Casillas de Correo. Pueden guardar distintos mensajes, aun despus de su lectura, para procesarlos ms tarde. Tambin puede operar en los mensajes de mayor prioridad antes de manejar el resto. Puede crear varias opciones con las Casillas de Correo y las Colas.
Interrupciones
Las interrupciones son uno de los mejores "inventos" para solucionar problemas de Tiempo-Real. Con ellas puede obtener una respuesta muy rpida a sus necesidades y retornar a lo que estaba haciendo. El nico problema es que pueden ocurrir en los peores momentos. Esto implica que deber aprender a activarlas y desactivarlas para proteger sus secciones crticas. Advierta que antes de manejar una interrupcin, deber guardar todos los registros importantes para que pueda restaurarlos a fin de que el kernel pueda reiniciar la tarea donde fue interrumpida. Este proceso se asemeja a la interrupcin de contexto, pero en estas interrupciones (interrupts), siempre deber guardar y restauTiempo de Procesamiento ISR rar. En el ejemplo del PIC16C64, los registros Status, W y FSR se guardaron en RAM El Tiempo de Procesamiento ISR (Rutina debido a la interrupcin. El registro PC fue de Servicio de Interrupcin) se define coguardado en la acumulacin por el hard- mo el tiempo en el cual una ISR controla la ware. CPU. El tiempo debiera ser breve, y si ne-
El Estado latente de Interrupcin se define como el perodo de tiempo ms largo en el que las interrupciones son desactivadas, ms el tiempo que le lleva a la ISR iniciar su ejecucin. Para un sistema No-Prioritario, el Tiempo de Respuesta de Interrupcin se define como Estado latente de Interrupcin ms el "tiempo de guar dado del contexto". contexto" Para un sistema Prioritario, debe agregar el tiempo de ejecucin en el cual el kernel graba la interrupcin. Para un sistema NoPrioritario, el Tiempo de Recuperacin de Interrupcin se define como el tiempo que lleva restaurar el contexto guardado ms el reinicio de la tarea interrumpida. Para un sistema Prioritario, la Recuperacin es similar a la del sistema No-Prioritario ms el tiempo que le lleva al kernel en el planificador la decisin de cual ser la siguiente tarea a ejecutarse. Estas mediciones sirven para comparar la mayora de los kernels. El ejemplo del PIC16C64 cumple bien con estas medidas. Esto se debe a que los procesadores PIC16CXXX en general tienen sistemas No-Prioritarios. La desactivacin de las interrupciones debe hacerse en el menor tiempo posible en cualquier kernel o tarea que escriba. Deber quebrar largas secuencias de instrucciones para permitir que se ejecuten las interrupciones en espera.
15
Esta es la seccin principal de este captulo. Aqu explicaremos detalladamente cmo la gente de Microchip ha llevado a la prctica los conceptos descriptos hasta ahora para construir una Alarma Remota. Interrupciones No-Ocultables Cabe aclarar que en el captul 5 se desarrolla completamente cada una de las En algunos microprocesadores, como tar eas programadas en el PIC, se da, en los de la familia PICmicro, puede actiadems, el cdigo de programacin covar y desactivar interrupciones selecciona- rrespondiente. das. Esta es una herramienta muy til para Daremos algunas ideas sobre cmo excontrolar la corriente de datos dentro y pandir los ejemplos y cul es su verdadero fuera del sistema. Algunos sistemas tienen alcance y velocidad. Interrupciones No-Ocultables (enmascaraLa aplicacin "Alar ma Remota" tiene bles). En este caso no las puede desactivarias caractersticas interesantes. Su funvar mediante un ocultamiento de softwa- cionamiento se basa en tener tantas filas re. Estas NMIs (abreviatura de Interrupcio- de unidades como un rbol que, alimennes No-Enmascarables) se usan como con- tado desde el nivel ms bajo, une los nivetraseas de reloj, para evitar problemas les de cada una de sus ramas ms grancon las secciones crticas de una interrup- des en un punto central. cin que no pueda desactivar. La familia Cada unidad puede detectar los camPIC16CXXX no tiene NMIs. Estas interrupcio- bios de estado realizados antes de que un nes no son tan tiles como las ocultables. intruso apague o corrompa la unidad. Si se corta cualquiera de los cables de potencia conectados al rbol, la falta de estaContrasea de Reloj dos y contraseas ser advertida en cinco segundos e informada a la lnea. La dos lLa Contrasea de Reloj es la pulsacin neas de Entrada Series por unidad reciben
16
"Alarma Remota" Este ejemplo intenta explicar una aplicacin verdadera y mostrar algunos conceptos y caractersticas nuevas. Se ha quitado una parte del cdigo especfico de aplicacin para mostrar ms claramente las posibilidades de un Sistema Operativo de Tiempo-Real usando la familia PICmicro. Decidimos que el promedio Baud para la salida Serie tenga el doble de velocidad de las dos entradas Series, ya que es ms difcil alcanzar una Salida Serie precisa
Figura 6
17
18
19
Figura 7
Una de las patas del puerto A puede ser utilizada como entrada de interrupciones (recuerde que esta pata especial hace que el microprocesador deje de realizar la tarea que estaba ejecutando y pase a realizar otra tarea alternativa; cuando la termina vuelve a su programa original). Analicemos el bloque ms grande, en ste observamos un grupo de bloques dedicados a mejorar el funcionamiento pero sin influir directamente en el flujo de seales. Vemos un temporizador de encendido, un temporizador de arranque del oscilador Estructura Interna del PIC16C84 de CLOCK, un circuito de reset y un circuiNo hace falta conocer al detalle el fun- to llamado de vigilancia o WATCHDOG. TCHDOG cionamiento interno del PIC, pero vamos a Los dos primeros bloques procuran un arranque ordenado para no producir una indicar en grandes rasgos para qu sirve carga al mismo tiempo sobre la fuente. cada bloque. Por ltimo, existe un circuito con un Observe primero los bloques externos. Existe un cristal que se conecta en OSC1 y nombre curioso, si el lector sabe algo de OSC2 para generar el CLOCK del sistema. ingls habr traducido el nombre literalmente como perr o guar din. Su funLuego una seal de entrada llamada din MCLR negada, que es un nombre de fan- cin es estar vigilante el mximo de tiemtasa para nuestro conocido RESET (debido po que tarda el microprocesador en coma que esa pata tiene un doble uso) y, por pletar su programa (o mejor sera decir, la ltimo, dos puertos paralelos de I/O (entra- derivacin ms larga de su programa) y da o salida) llamados puerto A y puerto B. en caso de superarse ese tiempo, provo-
20
21
22