SISTEMAS EMPOTRADOS Optativa de 2º ciclo Ingeniería Informática Ingeniería de Telecomunicación José Luis Villarroel Salcedo Departamento de Informática e Ingeniería de Sistemas Centro Politécnico Superior Universidad de Zaragoza ÍNDICE • • • • • • • • • • • Introducción El 68HC08 El TMS320F2812 Herramientas de desarrollo Gestión del tiempo Sistemas discretos secuenciales Sistemas muestreados Procesos concurrentes Ejecutivos cíclicos Prioridades e interrupciones Núcleos multitarea 1 40 100 157 202 237 298 353 368 410 437 1 SISTEMAS EMPOTRADOS SISTEMAS EMPOTRADOS INTRODUCCIÓN 2 SISTEMAS EMPOTRADOS DEFINICIÓN Sistema de Tiempo Real: Es un sistema informático en el que es significativo el tiempo en el que se producen sus acciones. No basta que las acciones de un sistema sean correctas, sino que, además, deben ocurrir dentro de un intervalo de tiempo determinado. Los sistemas tiempo real suelen estar integrados en un sistema de ingeniería más general, en el que realizan funciones de control, procesamiento y/o monitorización: SISTEMAS EMPOTRADOS (embedded systems) Ejemplos: Vídeo, lavadora, ABS, …, computadora de vuelo 3 SISTEMAS EMPOTRADOS EJEMPLO Computador de un coche Km Km/h Cont. Velocidad Tª Hora Computador Control Empotrado Calefacción Aire Acondicionado Pedales Ruedas Sistema Inyección 4 SISTEMAS EMPOTRADOS EJEMPLO Varias tareas: Control automático de velocidad Ordenes del conductor: Control climatización » comienzo cont. velocidad Visualización: » establecimiento temperatura interior » velocidad » rpm » consumo » niveles » alarmas » ... » puesta en hora » ... 5 SISTEMAS EMPOTRADOS CARACTERÍSTICAS Concurrencia Los componentes del sistema controlado o monitorizado funcionan simultáneamente El sistema de control debe atenderlo y generar las acciones de control o visualización de forma simultánea Un computador ejecuta sus acciones de forma secuencial RAPIDEZ se puede hacer que el computador ejecute sus acciones de forma aparentemente simultánea Computadores multiprocesador o sistemas con varios computadores 6 SISTEMAS EMPOTRADOS CARACTERÍSTICAS Fiabilidad y seguridad Un fallo en un sistema de control puede hacer que el sistema controlado se comporte de forma peligrosa o antieconómica Es importante asegurar que si el sistema de control falla lo haga de forma que el sistema controlado quede en un estado seguro => hay que tener en cuenta los posibles fallos o excepciones en el diseño Eficiencia Gran parte de los sistemas de control deben responder con gran rapidez a los cambios en el sistema controlado 7 SISTEMAS EMPOTRADOS CARACTERÍSTICAS Interacción con dispositivos físicos Los sistemas empotrados interaccionan con su entorno mediante diversos tipos de dispositivos que normalmente no son convencionales (teclados, impresoras, ...): convertidores A/D y D/A, pwm, entradas y salidas digitales paralelo y serie, ... (interfases con sensores, actuadores, periféricos especiales, ...) Los componentes del software que controlan el funcionamiento de estos dispositivos (manejadores, "drivers") son, en general, dependientes del sistema concreto 8 SISTEMAS EMPOTRADOS CARACTERÍSTICAS Robustez Embarcados en sistemas con movimiento o que pueden ser transportados, sujetos a vibraciones e incluso impactos (coches, robots, instrumentación portátil, ...) No siempre trabajan en condiciones óptimas de temperatura, humedad, limpieza. Factor de protección IP: IP65 » Primer dígito: protección ante entrada de sólidos (polvo) » Segundo dígito: protección ante la entrada de líquidos 9 SISTEMAS EMPOTRADOS CARACTERÍSTICAS Bajo consumo Muchos de estos sistemas están alimentados con baterías o pilas. Menor consumo => mayor autonomía En muchos casos necesidades de bajo voltaje (3V) Bajo peso Característica de agradecer en sistemas portátiles No depende únicamente del computador embarcado y su periferia sino también de la alimentación (baterías) o de los sensores y actuadores 10 SISTEMAS EMPOTRADOS CARACTERÍSTICAS Bajo precio Aplicable a electrónica de consumo y otros dispositivos con mercados muy competitivos (p.e. telefonía móvil) Pequeñas dimensiones Las dimensiones de un sistema empotrado no dependen sólo de sí mismo sino también del espacio disponible en el sistema que controla y/o monitoriza. Característica a tener muy en cuenta por los problemas que acarrea 11 SISTEMAS EMPOTRADOS EJEMPLOS Ejemplos de sistemas empotrados Electrónica de consumo » Videos, HIFI, televisión, ... » Lavadoras, frigoríficos, lavaplatos, ... Automóviles » Control velocidad, climatización, visualización » ABS, ASR » Inyección Telecomunicaciones » Radios, teléfonos móviles » GPS Aviónica, espacial » Computadores de vuelo, de misión » Path-finder Defensa » Bombas y misiles inteligentes » Vehículos, dirección de tiro, ... Instrumentación 12 SISTEMAS EMPOTRADOS CLASIFICACIÓN COMPUTADORES EMPOTRADOS NO EMPOTRADOS PROPÓSITO GENERAL Supercomputadores Servidores Estaciones de trabajo PC's Calculadoras Cálculo científico Gestión (bancos, empresas) Bases de datos TIEMPO REAL Tarjetas microprocesadores + tarjetas E/S + bus Autómatas Programables Reguladores digitales Control industrial Simuladores de vuelo Robótica Tarjetas microprocesadores + tarjetas E/S + bus Microcontroladores, DSPs Electrodomésticos Aeronáutica Teléfonos móviles 13 SISTEMAS EMPOTRADOS LOS MICROS Microprocesadores Propósito general Potente CPU Caches y manejo eficiente de memoria SI CPU especializada: •Instrucción MAC •Manejo buffers, ... Memoria interna (RAM/ROM) Periféricos: •Timers •Líneas serie alta velocidad Memoria interna (RAM/ROM) Periféricos: •E/S digitales •Conversores A/D •PWM •Timers •Líneas serie (SCI, SPI) SI Memoria externa Caches NO Caches NO Microcontroladores DSPs Control digital La CPU no necesita potencia Todo en un CHIP Procesado Digital de Señal Potente CPU especializada Comunicación con conversores A/D externos 14 SISTEMAS EMPOTRADOS EL MERCADO 10000 9000 8000 7000 6000 5000 4000 3000 8-bit 2000 4-bit 1000 0 16-bit 91 90 92 93 94 µC DSP 95 96 97 98 99 SISTEMAS EMPOTRADOS 15 CARACTERÍSTICAS DE LOS µC y DSP Técnica de fabricación CMOS: Complementary Metal Oxide Semiconductor » La inmensa mayoría de los procesadores para sistemas empotrados se fabrican en esta tecnología » Menor consumo (alimentación a baterías) » Mayor inmunidad al ruido » Son chips casi o totalmente estáticos (no necesidad de refresco) => el reloj puede ser ralentizado o detenido: seelp mode SISTEMAS EMPOTRADOS 16 CARACTERÍSTICAS DE LOS µC y DSP Arquitecturas Von-Neuman (µC) » Programa y datos son almacenados en la misma memoria principal. Un único bus de datos. » Primero se busca la instrucción y entonces el dato involucrado => Dos búsquedas en secuencia. Harvard (µC y DSP) » Bus de datos y bus de instrucciones separados. » Arquitectura segmentada => búsquedas en paralelo » Pre-búsqueda de siguiente instrucción en paralelo con acceso a los datos de la instrucción en ejecución SISTEMAS EMPOTRADOS CARACTERÍSTICAS DE LOS µC y DSP CISC: Complex Instruction Set Computer » Muchas instrucciones diferentes. Potentes y especializadas. » Facilita la programación. » Código muy compacto » P.e.: Motorola RISC: Reduced Instruction Set Computer » Pocas instrucciones muy sencillas. » La sencillez de las instrucciones permite liberar área de silicio para implementar características que mejoren las prestaciones. » Chips más baratos, de menor consumo, de menos pines. » P.e.: PIC 17 18 SISTEMAS EMPOTRADOS CARACTERÍSTICAS DE LOS µC y DSP Memorias PROGRAMA PARÁMETROS DATOS NO VOLÁTILES VARIABLES PILA ROM OTP EPROM EEPROM FLASH EEPROM FLASH RAM con batería RAM SISTEMAS EMPOTRADOS 19 CARACTERÍSTICAS DE LOS µC y DSP Máscara » Memoria ROM » Programada en fábrica OTP: One Time Programmable » Es un dispositivo PROM. En realidad una EPROM sin ventana de borrado. » Una vez que el programa ha sido grabado no puede ser borrado ni modificado » Alternativa a la máscara ROM para series pequeñas Reprogramación » El uso de EPROM, EEPROM, EPROM y FLASH para la memoria de programa facilita el desarrollo y puesta a punto de dispositivos » El uso de EEPROM, EPROM y FLASH permite la reprogramación del procesador sin extraerlo del sistema que controla – Nuevas versiones, eliminación de errores SISTEMAS EMPOTRADOS 20 CARACTERÍSTICAS DE LOS µC y DSP Alimentación Bajo voltaje » Alimentación a 5V (µC) » Alimentación a 3V (µC y DSP) IDLE/HALT » Modos de bajo consumo, manteniendo valores de registros, memoria y salidas » IDLE: se para la CPU – El micro se despierta con una interrupción externa o interna (timers) o con el RESET – Actividad periódica del micro -> timer dedicado a despertar » HALT: se para todo (CPU, timers, periféricos), el micro se despierta sólo con una interrupción externa o RESET SISTEMAS EMPOTRADOS CARACTERÍSTICAS DE LOS µC y DSP Entradas / salidas UART: Universal Asynchronous Receiver Transmitter » SCI: Serial Comunication Interface. Synchronous Serial Port » SPI: Serial Periferal Interface » McBSP: Multi Channel Buffered Serial Port I2C: Inter-Integrated Circuit bus » Bus serie de dos hilos » Multi-master, multi-slave, detección de colisiones. 128 dispositivos, 10 metros CAN: Controller Area Network » Bus con prioridades 21 SISTEMAS EMPOTRADOS 22 CARACTERÍSTICAS DE LOS µC y DSP Conversión Analógico-Digital (sólo µC, algún DSP) » Dada la dificultad de integrar circuitos analógicos con digitales no suelen tener gran precisión » Normalmente 8 ó 10 bits Conversión Digital-Analógica (sólo µC , algún DSP) » No suele estar implementada » PWM: Pulse Width Modulator. Se usa como técnica de conversión D/A Contadores de pulsos (sólo µC) » Cada pulso/evento incrementa un registro acumulador -> número de veces que ha sucedido el evento SISTEMAS EMPOTRADOS 23 CARACTERÍSTICAS DE LOS µC y DSP Interrupciones Desde los periféricos: timers, UARTS, A/D, E/S paralelo, componentes externos. Interrupciones enmascarables -> se pueden activar y desactivar Interrupciones vectorizadas: una dirección de salto para cada interrupción Prioridades SISTEMAS EMPOTRADOS 24 CARACTERÍSTICAS DE LOS µC y DSP Características especiales Watchdog timer » Si el programa no reinicializa el watchdog antes de un cierto tiempo, éste procede a hacer el RESET del sistema Monitor del reloj » Circuito que detecta si el reloj funciona demasiado despacio => RESET Monitor » Programa residente que facilita el desarrollo y la puesta a punto (carga, break points, ...) Floating point vs fixed point (DSPs) 25 SISTEMAS EMPOTRADOS µC POPULARES 8051 (Intel) Arquitectura Harvard (direccionamiento separado para datos e instrucciones) Bus de 8 bits de datos Puede direccionar 64K de programa (los 4K ó 8K bajos pueden residir en chip) y 64K de memoria de datos externa. 128 bytes de RAM interna + registros especiales. E/S direccionadas en espacio propio. » Bus de direcciones de 16 bits Gran potencia en instrucciones de bit Timers y puertos serie (no A/D ni PWM) 8048 serie baja 80c196 de 16 bits 80186: microcontrolador con un 8086 como núcleo (PC XT) 26 SISTEMAS EMPOTRADOS µC POPULARES 68HC11 (Motorola) Arquitectura Von Neuman (datos, programa, E/S, timers comparten el mismo espacio de memoria) Bus de 8 bits de datos, 16 bits de direcciones Pueden tener: EEPROM/OTPROM, RAM, E/S digitales, timers, A/D, PWM, acumuladores de pulsos, comunicación serie síncrona y asíncrona Serie baja 68HC05 683xx: microcontrolador con un 68xxx como núcleo 27 SISTEMAS EMPOTRADOS µC POPULARES 68HC08 (Motorola) Arquitectura Von Neuman (datos, programa, E/S, timers comparten el mismo espacio de memoria) Bus de 8 bits de datos, 16 bits de direcciones Pueden tener: ROM/FLASH, RAM, E/S digitales, timers, A/D, PWM, acumuladores de pulsos, comunicación serie síncrona y asíncrona Existen elementos de la familia con USB, IIC, CAN Hasta 60K de Flash, hasta 2K de RAM 28 SISTEMAS EMPOTRADOS µC POPULARES PIC (MicroChip) Arquitectura Harvard (direccionamiento separado para datos e instrucciones) » solapamiento de instrucciones Primer microcontrolador RISC 16Cxx principal línea de la casa » 35 instrucciones » 8 bits de datos » 14 bits de instrucción (hasta 8K instrucciones) » Pueden tener: EEPROM/OTPROM, RAM, E/S digitales, timers, A/D, PWM, acumuladores de pulsos, comunicación serie síncrona y asíncrona 29 SISTEMAS EMPOTRADOS DSPs POPULARES Las familias de Texas Instruments C2000 C5000 C6000 Lowest Cost Efficiency Performance & Best Ease-of-Use Control Systems Motor Control Storage Digital Ctrl Systems Best MIPS per Watt / Dollar / Size Wireless phones Internet audio players Digital still cameras Modems Telephony VoIP Multi Channel and Multi Function App's Comm Infrastructure Wireless Base-stations DSL Imaging Multi-media Servers Video 30 SISTEMAS EMPOTRADOS DSPs POPULARES Familia 6000 (Texas Intruments) Program RAM Data Ram Addr (32) Internal Buses DMA D (32) EMIF .M1 .M2 .L1 .L2 .S1 .S2 Control Regs CPU Regs (B0-B15) Regs (A0-A15) Ext’l Memory .D1 .D2 Serial Port Host Port Boot Load Timers Pwr Down 31 SISTEMAS EMPOTRADOS DSPs POPULARES Familia 6000 (Texas Instruments) Device MHz Kbytes pins mm W 6201B 1600 200 128 352 27 6202 2000 250 384 352 6211 1200 150 72 MHz 6701 6711 TMS320 MIPS $ Periphs 1.9 80-110 D2H 27 1.9 120-150 D3X 256 27 1.5 20-40 E2H Kbytes pins mm W $ Periphs 1000 167 128 352 35 1.9 170-200 D2H 600 100 72 256 27 0.9 20-40 E2H MFLOPS Peripherals Legend: D,E: DMA,EDMA 2,3: # of McBSPs H,X: HPI, XBUS 32 SISTEMAS EMPOTRADOS DSPs POPULARES Familia 2000 (Texas Instruments) C24x » 16-bit data Fixed-Point » SCI, SPI, CAN, A/D, event manager, watchdog timers, on-chip Flash memory, 20-40 MIPS C28x » 32-bit data Fixed-Point » SCI, SPI, CAN, 12-bit A/D, McBSP, watchdog timers, on-chip Flash memory, up to 400 MIPS 33 SISTEMAS EMPOTRADOS DSPs POPULARES Otros fabricantes importantes: Analog Devices (www.analog.com/dsp) » ADSP-21xx 16 bit, fixed point » ADSP-21xxx 32 bit, floating and fixed point Lucent Technologies (www.lucent.com) » DSP16xxx 16 bit fixed point » DSP32xx 32 bit floating point Motorola (www.mot.com) » DSP561xx 16 bit fixed point » DSP560xx 24 bit, fixed point » DSP96002 32 bit, floating point SISTEMAS EMPOTRADOS LENGUAJES DE PROGRAMACIÓN Ensamblador Permiten el uso eficiente de los recursos Programación costosa y casi imposible la modificación » El código debe ser documentado, empleo de símbolos » Programación estructurada Lenguajes de alto nivel Desarrollo más rápido, mantenimiento menos costoso ↓ eficiencia ↑ ocupación en memoria Ada --> grandes sistemas empotrados C --> ¡La estrella! » Permite el acceso a los recursos hardware 34 35 SISTEMAS EMPOTRADOS LENGUAJES DE PROGRAMACIÓN Uso de C y Ensamblador Programación en C » Puesta a punto de la lógica del programa Reescritura de algunas partes críticas en ensamblador » Disminución de la ocupación de memoria Fuente Ensamblador Fuente C Compilador Cruzado Ensamblador Cruzado Objeto Relocalizable Objeto Relocalizable Librerías » Aumento de las prestaciones Fichero Configuración Montador de Enlaces Ejecutable No Relocalizable Cargador Máscara Microcontrolador DSP SISTEMAS EMPOTRADOS 36 HERRAMIENTAS DE DESARROLLO Simuladores Un simulador ejecuta un programa de un microcontrolador o DSP en un computador de propósito general (p.e. un PC) Los contenidos de la memoria y registros pueden ser observados y alterados No soporta interrupciones reales ni (generalmente) hardware adicional La velocidad de ejecución es menor que en el procesador real SISTEMAS EMPOTRADOS 37 HERRAMIENTAS DE DESARROLLO Tarjetas de evaluación con monitor residente Elementos básicos: » Procesador + Hardware periférico básico » Línea de comunicación » Conector para enlazar hardware propio » Programa monitor en ROM El monitor permite: » La carga y ejecución de programas » Visualización y actualización de memoria, breakpoints, ... Desventajas del monitor residente: » El monitor se ejecuta en el mismo procesador que el programa del usuario. » Utiliza recursos del procesador (un puerto de comunicación, una interrupción y memoria) y ralentiza la ejecución (acceso a memoria y registros y comunicación) SISTEMAS EMPOTRADOS HERRAMIENTAS DE DESARROLLO Puerto específico en el mismo procesador Ejemplos » IEEE Std 1149.1 (IEEE Standard Test Access Port and Boundary-Scan Architecture) » Modo monitor en el 68HC08 (MON08) Puerto específico que permite: » Test del sistema en línea » Programación del procesador en línea » Puesta a punto Es un recurso específico del procesador para estas tareas » Puerto al exterior » Circuitería » Software de carga, comunicación, ... 38 SISTEMAS EMPOTRADOS 39 HERRAMIENTAS DE DESARROLLO Emuladores Hardware que “emula” al procesador y además permite obtener información y actuar sobre la aplicación sin gastar recursos ni alterar la evolución temporal Se comunica por una parte con un computador o terminal (vía RS232 o similar) y por otra con el sistema que se está desarrollando (mediante el POD) 40 SISTEMAS EMPOTRADOS SISTEMAS EMPOTRADOS El 68HC08 41 SISTEMAS EMPOTRADOS DESCRIPCIÓN GENERAL Características básicas Arquitectura Von Neuman 8MHz frecuencia bus a 5Volt Bus datos y aritmética 8 bits Comunicación serie asíncrona SCI, y síncrona SPI Modulo de generación de reloj con PLL Bus direcciones 16 bits TBI, interrupción de tiempo real multiplicación 8x8 rápida 2 módulos temporizadores 16 bits,PWM división 16/8 rápida 512 RAM, 32K FLASH Interrupciones vectorizadas, con prioridades In-system programming Conversor A/D de 8 canales y 8 bits, tiempo conversión 17µS E/S en espacio de memoria 33 pines I/O » 10 mA todas I/0, 15 mA 5 E/S » “pull up” programable Watchdog COP, detección de bajo voltaje Alimentación a 3 V ó 5 V Dos estados de bajo consumo: WAIT y STOP 42 SISTEMAS EMPOTRADOS DESCRIPCIÓN GENERAL Diagrama bloques HC08 43 SISTEMAS EMPOTRADOS DESCRIPCIÓN GENERAL Mapa de memoria 44 SISTEMAS EMPOTRADOS DESCRIPCIÓN GENERAL Low Power Modes Existen dos modos de ahorro de energía: WAIT y STOP WAIT » CPU apagada » Periféricos continúan funcionando » Salida del modo: RESET o Interrupción (externa o de los periféricos) STOP » CPU apagada » Periféricos apagados salvo el KBI » TBM puede quedar activo » Salida del modo: RESET, IRQ, interrupción del TBM o del KBI 45 SISTEMAS EMPOTRADOS DESCRIPCIÓN GENERAL Encapsulados 44 QFP 42 SDIP 40 PDIP 46 SISTEMAS EMPOTRADOS DESCRIPCIÓN GENERAL Familia HC08 RAM 128 bytes .. 4096 bytes Dos tecnologías » Flash (68HC908) 4K .. 60K » Máscara ROM (68HC08) EEPROM 0 bytes .. 1024 bytes Comunicación serie Canales en los timers CAD 406 bytes .. 32 K SPI, SCI, CAN, USB, I2C 1 .. 8 8 ó 10 bits, 8 a 14 canales 47 SISTEMAS EMPOTRADOS CPU08 Características básicas Hasta 8MHz frecuencia Bus datos y aritmética 8 bits Bus direcciones 16 bits » 64K de programa y datos Multiplicación 8x8 rápida División 16/8 rápida 16 modos de direccionamiento Modos de bajo consumo: WAIT y STOP Puede ejecutar código para el HC05 48 SISTEMAS EMPOTRADOS CPU08 Conjunto de registros que pueden ser manipulados por el conjunto de instrucciones: Acumulador A Registro índice H:X Puntero de pila SP, también registro índice Contador de programa PC Registro de códigos de condición 49 SISTEMAS EMPOTRADOS CPU08 Modos de direccionamiento: Inmediato, el valor del operando » LDA #01 Extendido, la dirección dato (direcciones > $FF) » LDA $8001 Directo, la dirección del dato (direcciones < $FF) » LDA $01 Relativo, instrucciones de salto » rango -127..127 » BRA ETIQUETA (salto dentro del rango) » código reubicable » menor tamaño de las instrucciones Inherente » TSX H:X ←(SP)+1 indexado la dirección del operando se calcula sumando un desplazamiento (offset) a un registro índice » indexado sin desplazamiento LDA ,X ; A ← (X) » Indexado, desplazamiento 8bits LDA $2,X; A ← (X+ $2) » Indexado, desplazamiento 16bits LDA $8000,X; A ← (X+$8000) » indexado SP, desplazamiento 8 bits LDA $1,SP » indexado SP, desplazamiento 16 bits LDA $8000,SP 50 SISTEMAS EMPOTRADOS CPU08 Conjunto de instrucciones Carga de Registros LDA Load Accumulator from Memory LDHX Load Index Register from Memory LDX Load X (Index Register Low) from Memory PULA Pull Accumulator from Stack PULH Pull H (Index Register High) from Stack PULX Pull X (Index Register Low) from Stack Salvado de registros STA Store Accumulator in Memory STHX Store Index Register STX Store X (Index Register Low) in Memory PSHA Push Accumulator onto Stack PSHH Push H (Index Register High) onto Stack PSHX Push X (Index Register Low) onto Stack Transferencia entre registros TAP Transfer Accumulator to Processor Status Byte TAX Transfer Accumulator to X (Index Register Low) TPA Transfer Processor Status Byte to Accumulator TSX Transfer Stack Pointer to Index Register TXA Transfer X (Index Register Low) to Accumulator TXS Transfer Index Register to Stack Pointer Transferencia memoria - memoria MOV Move Incremento/Decremento INCA Increment Accumulator INCX Increment X (Index Register Low) INC Increment DECA Decrement Accumulator DECX Decrement X (Index Register Low) DEC Decrement Activado/desactivado de bits BCLR n Clear Bit n in Memory BSET n Set Bit n in Memory CLRA Clear Accumulator CLRX Clear X Index Register Low CLRH Clear H Index Register High CLR Clear CLC Clear Carry Bit SEC Set Carry Bit RSP Reset Stack Pointer 51 SISTEMAS EMPOTRADOS CPU08 Conjunto de instrucciones Operaciones aritméticas ADD Add without Carry AIS Add Immediate Value (Signed) to Stack Pointer AIX Add Immediate Value (Signed) to Index Register ASL Arithmetic Shift Left ASR Arithmetic Shift Right DAA Decimal Adjust Accumulator DIV Divide LSL Logical Shift Left LSR Logical Shift Right MUL Unsigned Multiply NEGA Negate Accumulator(Two?s Complement) NEGX Negate X Index Register Low (Two?s Complement) NEG Negate (Two?s Complement) SBC Subtract with Carry SUB Subtract NSA Nibble Swap Accumulator Operaciones lógicas AND Logical AND EOR Exclusive-OR Memory with Accumulator ORA Inclusive-OR Accumulator and Memory COMA Accumulator Complement (One's Complement) COMX X Index Register Low Complement (One's Complement) COM Complement (One's Complement) Rotaciones/Desplazamientos ROLA Rotate Accumulator Left through Carry ROLX Rotate X Index Register Low Left through Carry ROL Rotate Left through Carry RORA Rotate Accumulator Right through Carry RORX Rotate X Index Register Low Right through Carry ROR Rotate Right through Carry Test datos CMP Compare Accumulator with memory CPHX Compare H:X with M CPX Compare X with M BIT Bit Test TSTA Test Accumulator for Negative or Zero TSTX Test X Index Register Low for Negative or Zero TST Test for Negative or Zero 52 SISTEMAS EMPOTRADOS CPU08 Conjunto de instrucciones Salto condicional BCC Branch if Carry Bit Clear BCS Branch if Carry Bit Set BEQ Branch if Equal BGE Branch if Greater Than or Equal To BGT Branch if Greater Than BHCC Branch if Half Carry Bit Clear BHCS Branch if Half Carry Bit Set BHI Branch if Higher BHS Branch if Higher or Same BIH Branch if IRQ Pin High BIL Branch if IRQ Pin Low BLE Branch if Less Than or Equal To BLO Branch if Lower BLS Branch if Lower or Same BLT Branch if Less Than BMC Branch if Interrupt Mask Clear BMI Branch if Minus BMS Branch if Interrupt Mask Set BNE Branch if Not Equal BPL Branch if Plus BRSET n Branch if Bit n in Memory Set BRCLR n Branch if Bit n in Memory Clear DBNZ Decrement and Branch if Not Zero CBEQ Compare and Branch if Equal Salto incondicional JMP Jump JSR Jump to Subroutine BSR Branch to Subroutine RTS Return from Subroutine BRA Branch Always BRN Branch Never Varios NOP No Operation Interrupciones RTI Return from Interrupt SWI Software Interrupt WAIT Enable Interrupts; Stop Processor STOP Enable IRQ Pin, Stop Oscillator CLI Clear Interrupt Mask Bit SEI Set Interrupt Mask Bit 53 SISTEMAS EMPOTRADOS Clock Generator Module CGM Fuente de reloj para el µC: reloj externo a la frecuencia de trabajo reloj externo a baja frecuencia + PLL interno multiplicador frecuencia CGMXCLK PLL CGMVCLK selector fuente reloj CGMOUT ÷2 ÷2 BUS CLOCK 54 SISTEMAS EMPOTRADOS Clock Generator Module CGM Posibilidades del reloj externo Sin PLL: dc .. 32.8 MHz Con PLL: 30 KHz .. 1.5 MHz Frecuencia de BUS Alimentación de 5V: máximo 8.4 MHz Alimentación de 3V: máximo 4.1 MHz Ejemplo de uso de PLL 55 SISTEMAS EMPOTRADOS Clock Generator Module CGM Circuito externo para el CGM Circuito de reloj Filtro para el PLL 56 SISTEMAS EMPOTRADOS Interrupciones Características básicas 16 posibles fuentes de interrupción SWI interrupción software Reset Vectorizadas » 18 vectores diferentes » Tabla de interrupciones en dirección fija: al final del espacio de direccionamiento: $FFDC..$FFFF Enmascarables salvo SWI y RESET Se pueden habilitar de forma individual 57 SISTEMAS EMPOTRADOS Interrupciones RESET Fuentes » Encendido (Power-ON Reset, POR) » Pin RESET externo: RST » Watchdog COP » Low Voltaje » IIegal opcode » Ilegal address Acciones » Detiene la ejecución de la instrucción en curso » Inicializa el valor de ciertos registros » Carga en el PC el contenido del vector de RESET ($FFFE-$FFFF) » Selecciona el reloj externo ÷4 como reloj de BUS 58 SISTEMAS EMPOTRADOS Interrupciones Fuentes de Interrupciones Línea IRQ externa Internas de los periféricos » Timer, TBM, CGM » E/S: SCI, SPI, Keyboard, ADC Interrupción por programa SWI Habilitación de interrupciones El bit I del CCR indica si la CPU atiende interrupciones » I = 1, no se atienden. SEI, pone el bit a 1 » I = 0, se atienden. CLI, pone el bit a 0 » enmascaradas en reset para poder fijar el puntero pila Cada interrupción dispone de una bandera individual que permite enmascararla 59 SISTEMAS EMPOTRADOS Interrupciones Cada interrupción tiene una bandera que indica si hay petición IF1-IF16 de los registros INT1, INT2, INT3 IFx=1 indica interrupción pendiente IFx=0 indica interrupción no pendiente Sólo lectura INT1 INT2 INT3 60 SISTEMAS EMPOTRADOS Interrupciones Secuencia en una interrupción espera fin instrucción curso (peor caso DIV, 7 ciclos) Apilar registros de la CPU: PC, A, X, CCR » NO se apila H (parte alta del registro de índice) Enmascarar interrupciones (I = 1) » Por defecto las interrupciones no se anidan Cargar en el PC el vector de la interrupción pendiente más prioritaria Ejecución del código de la rutina de interrupción En el RTI se desapilan los registros de la CPU » Se retoma el I (se vuelven a habilitar las interrupciones) » Se retoma el PC (se reanuda el programa interrumpido en la siguiente instrucción) 61 SISTEMAS EMPOTRADOS Interrupciones Orden de apilamiento de los registros de la CPU 62 SISTEMAS EMPOTRADOS Interrupciones Prioridades Las prioridades de las interrupciones son fijas Al acabar la instrucción actual se comprueba cuales son las interrupciones pendientes y se ejecuta la más prioritaria Anidamiento de interrupciones » Debe hacerse con cuidado » El salto a interrupción enmascara interrupciones. Normalmente no se anidan. » Si se permite el anidamiento de interrupciones TODAS las interrupciones habilitadas interrumpen, independientemente de su nivel de prioridad respecto de la interrumpida 63 SISTEMAS EMPOTRADOS Interrupciones Tabla resumen propiedades de interrupciones Source Reset SW Iinstruction IRQ pin CGM(PLL) TIM1 channel 0 TIM1 channel 1 TIM1 overflow TIM2 channel 0 TIM2 channel 1 TIM2 overflow SPI receiver full SPI overflow SPI modefault SP transmitter empty SCI receiver overrun SCI noise fag SCI raming error SCI parity error SCI receiver full SCI input idle SCI transmitter empty SCI transmission complete Keyboard pin ADC conversion complete Timebase Flag None None IRQF PLLF CH0F CH1F TOF CH0F CH1F TOF SPRF OVRF MODF SPTE OR NF FE PE SCRF IDLE SCTE TC KEYF COCO TBIF Mask None None IMASK PLLIE CH0IE CH1IE TOIE CH0IE CH1IE TOIE SPRIE ERRIE ERRIE SPTIE ORIE NEIE FEIE PEIE SCRIE ILIE SCTIE TCIE IMASKK AIEN TBIE INT Register Flag Priority VectorAddress None 0 $FFFE–$FFFF None 0 $FFFC–$FFFD IF1 1 $FFFA–$FFFB IF2 2 $FFF8–$FFF9 IF3 3 $FFF6–$FFF7 IF4 4 $FFF4–$FFF5 IF5 5 $FFF2–$FFF3 IF6 6 $FFF0–$FFF1 IF7 7 $FFEE–$FFEF IF8 8 $FFEC–$FFED IF9 9 $FFEA–$FFEB Code Warrior Int Num 1 2 3 4 5 6 7 8 9 10 IF10 IF11 10 11 $FFE8–$FFE9 $FFE6–$FFE7 11 12 IF12 12 $FFE4–$FFE5 13 IF13 13 $FFE2–$FFE3 14 IF14 IF15 IF16 14 15 16 $FFE0–$FFE1 $FFDE–$FFDF $FFDC–$FFDD 15 16 17 64 SISTEMAS EMPOTRADOS Interrupciones Interrupción externa IRQ Pin IRQ Registro de control y estado » Dos modos seleccionables MODE – MODE = 1 interrupción en flanco de bajada y en nivel bajo – MODE = 0 interrupción en flanco de bajada » Bits de ACK, IRQF y IMASK (máscara) Pullup interno siempre conectado 65 SISTEMAS EMPOTRADOS Entradas/salidas paralelas 33 pines I/O todos bidireccionales Organizados en 5 puertos A,B,C,D,E pines alta intensidad » Todos los pines a “1” pueden suministrar 10mA » Hay límite en la intensidad total suministrada por todos los pines de un puerto y por todos los puertos » Los pines PTC0-PTC4 pueden absorber 15mA compartidos con otros periféricos puertos A,C,D con pull-up programable » Ejemplo PTA 66 SISTEMAS EMPOTRADOS Entradas/salidas paralelas puerto pines E/S reg E/S reg reg dirección pull up función alternativa A 0-7 PTA DDRA PTAPUE KBI keyboard interrupt module B 0-7 PTB DDRB - ADC conversor analógico-digital C 0-6 PTC DDRC PTCPUE - D 0-7 PTD DDRD PTDPUE TIM temporización SPI Serial Periferial Interface E 0-1 PTE DDRE - SCI Línea Serie Asíncrona 67 SISTEMAS EMPOTRADOS Entradas/salidas paralelas Puerto A (similarmente B, C, D, E) 8 pines bidireccionales Registro de datos PTA Registro de dirección de los pines (entrada o salida) DDRA » DDRAx = 1 pin x configurado como salida » DDRAx = 0 pin x configurado como entrada Registro de habilitación de los pullup PTAPUE » PTAPUEx = 1 pullup habilitado » PTAPUEx = 0 deshabilitado 68 SISTEMAS EMPOTRADOS KBI, módulo de interrupción de teclado Asociado al puerto A Diseñado para detectar pulsadores en los pines PTA0-PTA7 Sensible al nivel bajo “ceros” Puede generar interrupciones » el banderín KEYF indica pulsación pendiente » si IMASKK = 0, KEYF provoca interrupción Puede seleccionarse qué pines son sensibles con el registro INTKBIER » KBIEx = 1 pin PTAx configurado como entrada y con pullup Detección del valor de pines » configuración pin de entrada con DDRA » lectura de PTA SISTEMAS EMPOTRADOS KBI, módulo de interrupción de teclado 69 70 SISTEMAS EMPOTRADOS KBI, módulo de interrupción de teclado Modo sensible únicamente a flancos de bajada » MODEK=0 » Detecta cualquier flanco de bajada si el resto de los pines está a 1 » Un flanco de bajada cuando un pin ya está a 0 no genera un nuevo KEYF » Borrado KEYF – salto a interrupción – escribir “1” en ACKK Modo sensible a flancos de bajada y nivel bajo » MODEK =1 » KEYF a 1 mientras un pin esté a 0 » Borrado KEYF – salto a interrupción – escribir “1” en ACKK y todos los pines del PTA a “1” 71 SISTEMAS EMPOTRADOS Convertidor A/D Características Un solo convertidor, 8 canales multiplexados Precisión 8 bits, aproximaciones sucesivas Tiempo de conversión: 17 ciclos ≈1MHz clock, 17µS Modos » Conversión contínua » Conversión única Flag indica fin de conversión. Puede generar interrupciones VREFL ≤ V ≤ VREFH » Conversión lineal $00 ≤ CONVERSION ≤ $FF 72 SISTEMAS EMPOTRADOS Convertidor A/D Registro de control y estado ADSCR AIEN Habilitación de las interrupciones » AIEN = 1 habilitadas » AIEN = 0 deshabilitadas ADCO Conversión continua » ADCO = 1 conversión continua » ADCO = 0 una única conversión COCO Conversión completa » AIEN =1, interrupciones habilitadas COCO debe ser forzado a “0” para permitir el servicio de las interrupciones » AIEN =0, interrupciones deshabilitadas COCO bit de sólo lectura – Se pone a 1 al final de una conversión – Se borra escribiendo en ADSCR o leyendo ADC 73 SISTEMAS EMPOTRADOS Convertidor A/D Registro de control y estado ADSCR ADCH4–ADCH0 entrada ADCH4-ADCH0 Selección canal de conversión 00000 PTB0/AD0 00001 PTB1/AD1 Comienzo de conversión 00010 PTB2/AD2 00011 PTB3/AD3 00100 PTB4/AD4 00101 PTB5/AD5 00110 PTB6/AD6 00111 PTB7/AD7 11101 Vrefh 11110 Vrefl 11111 ADC off » Escritura del ADSCR Registro de datos ADC 74 SISTEMAS EMPOTRADOS Convertidor A/D El ADC necesita una entrada de reloj en el intervalo [0.5,2.1] MHz. (Aconsejado 1 MHz) Registro de control del reloj del ADC ADCLK ADIV2-ADIV0 definen el divisor de la frecuencia fuente de reloj ADICKL- Selecciona la fuente de frecuencia de reloj » ADICKL = 0 Bus clock » ADICKL = 1 CGMXCLK (reloj externo) 75 SISTEMAS EMPOTRADOS Módulo TIMER, TIM Características generales Dispone de 2 “timer” independientes TIM1 y TIM2 Cada TIM dispone a su vez de 2 canales Para cada timer » Basado en un contador de 16 bits » Preescalado programable del reloj de entrada » 2 canales, para cada canal – input capture – output compare flanco subida, flanco bajada o cualquier cambio activar, desactivar o cambiar una patilla » generar interrupciones canal1, canal2 o desbordamiento contador Comparte el patillaje con el PTD 76 SISTEMAS EMPOTRADOS Módulo TIMER, TIM Diagrama de bloques de un TIM 77 SISTEMAS EMPOTRADOS Módulo TIMER, TIM Contador T1CNTH, T1TCNTL parte alta y baja del TIM1, sólo lectura » Lectura de T1CNTH congela el valor de T1CNTL hasta que es leído Admite reset (TRST en T1SC) y parada (TSTOP en T1SC) El contador TCNT es modular y cuenta hacia arriba » Empieza en $0000 » Cuando TCNT = TMOD TCNT = $0000 78 SISTEMAS EMPOTRADOS Módulo TIMER, TIM Preescalado programable con PS2-PS0 para bus clock 2.4575MHz divisor resolución µs desbordamineto ms PS2-PS0 1 0,407 26,7 000 2 0,814 53,3 001 4 1,628 106,7 010 8 3,255 213,3 011 16 32 64 6,510 13,021 26,042 426,7 853,3 1706,7 100 101 110 79 SISTEMAS EMPOTRADOS Módulo TIMER, TIM Registro de módulo T1MODH, T1MODTL parte alta y baja del valor de overflow 80 SISTEMAS EMPOTRADOS Módulo TIMER, TIM Registro de estado y control TSC TOF indica que se ha producido overflow. » Borrado, leer TSC cuando TOF=1 y después escribir “0” en TOF TOIE habilitación de interrupciones » TOIE=1 interrupciones habilitadas » TOIE=0 interrupciones deshabilitadas TSTOP TRST parada del contador del TIM reset del TIM (contador y preescalado) 81 SISTEMAS EMPOTRADOS Módulo TIMER, TIM Cada canal del TIM channel0 y channel1 puede ser configurado como input capture y output compare x puede indicar canal 0 ó 1 input capture El cambio de nivel de tensión de un pin » congela el valor del T1CNT en 2 registros T1CHxH: T1CHxL output compare cuando T1CNTH:T1CNTL coincide con el valor almacenado en T1CHxH: T1CHxL : » activa un banderin CHxF » se activa un banderín CHxF » podría provocar una interrupción » podría provocarse una interrupción aplicaciones » medida precisa instante evento » medida de intervalos » medida de frecuencia » interrupción externa adicional » puede cambiarse la tensión de salida de un pin aplicaciones » generación de ondas periódicas » generación de pulsos » Generación de interrupciones dependientes del tiempo 82 SISTEMAS EMPOTRADOS Módulo TIMER, TIM Función INPUT CAPTURE CHxIE, habilitación de interrupciones CHxF, Chanel x Flag » CHxF = 1 activo ha ocurrido un flanco » Borrado: lectura de TSCx con CHxF activo y después escritura de un 0 MSxB:MSxA 00 00 00 ELSxB:ELSxA 01 10 11 » CHxIE = 1 habilitadas » CHxIE = 0 deshabilitadas Configuración como input capture y selección del tipo de flanco Configuración CHx Input capture sólo flanco subida Input capture sólo flanco bajada Input capture cualquier flanco 83 SISTEMAS EMPOTRADOS Módulo TIMER, TIM Función OUTPUT COMPARE CHxIE, habilitación de interrupciones CHxF, Chanel x Flag » CHxF = 1 se ha producido la igualdad TCNT = TCHx » borrado: lectura de TSCx con CHxF activo y después escritura de un 0 MSxB:MSxA 01 01 01 01 ELSxB:ELSxA 00 01 10 11 » CHxIE = 1 habilitadas » CHxIE = 0 deshabilitadas Configuración como ouput compare y selección del tipo de flanco Configuración CHx OC sin actuar sobre pin Conmutar salida cuando expira Salida a "0" cuando expira Salida a "1" cuando expira 84 SISTEMAS EMPOTRADOS Módulo TIMER, TIM Generación de ondas PWM La conversión D/A se realiza mediante PWM Se implementa con un OUTPUT COMPARE y el contaje modular del TCNT actuando sobre las patillas T1CHx » Tpwm se programa con el overflow de contador, haciendo conmutar T1CHx » Ton se programa mediante output compare forzando el cero en T1CHx al expirar la cuenta del output compare Ton Toff Vmáx V = Vmin + (Vmáx − Vmin ) Vmin Tpwm clear on output compare toggle on overflow Ton T 85 SISTEMAS EMPOTRADOS Módulo TIMER, TIM Generación de ondas PWM TOVx (registro TSCx) habilitan el cambio del estado lógico de las patillas TCHx ante un overflow del TCNT » Cuando el canal está inicializado como OUTPUT COMPARE fuerza el cambio del valor del pin asociado en un overflow TOVx = 1 » En otro caso no tiene efecto CHxMAX (registro TSCx) » CHxMAX = 1 el tiempo de ON del PWM es el 100% del periodo 86 SISTEMAS EMPOTRADOS Línea serie síncrona, SPI SPI = Synchronous Serial Peripheral Interface Comparte patillas con el puerto D Síncrona => envío del reloj Señales » MOSI: Master Output Slave Input » MISO: Master Input Slave Output » SPSCK: Reloj del SPI » SS = 0 (slave) » SS = 1 (master) 87 SISTEMAS EMPOTRADOS Línea serie síncrona, SPI Control SPCR: registro de control » SPE = 1 (SPI activada) » SPMSTR = 0 (slave) / = 1 (master) » CPOL, CPHA: configuración del reloj » SPRIE habilitación interrupción de recepción » SPTIE habilitación de la interrupción de transmisión completa 88 SISTEMAS EMPOTRADOS Línea serie síncrona, SPI Estado y control SPSCR: registro de estado y control » SPR0, SPR1: velocidad de transferencia (bits/s) – Baud rate = CGMOUT / (2 x BD) » SPRF – Si SPRIE = 1 » SPTE – bit que indica que el receptor está lleno interrupción bit que indica que el transmisor está vacío Si SPTIE = 1 interrupción » OVRF, ERRIE, MODF, MODFEN estado y control de errores 89 SISTEMAS EMPOTRADOS Línea serie síncrona, SPI Registro de datos SPDR: Dos registros ocupan la misma posición de memoria ($0012) » Lectura: buffer con el último byte recibido » Escritura: buffer registro de desplazamiento 90 SISTEMAS EMPOTRADOS Línea serie asíncrona, SCI SCI = Asynchronous Serial Communications Interface Comparte patillas con el PTE Full duplex, Baud rate programable Control de errores SCDR: registro de datos » Dos registros separados en la misma posición de memoria ($0018) » Escritura => transmisión, Lectura => recepción » Registro con buffer Transmisión - SCDR Recepción - SCDR 68HC08 TXD PTE0 PTE1 RXD PERIFERICO 91 SISTEMAS EMPOTRADOS Línea serie asíncrona, SCI Selección del “Baud Rate” Registro SCBR » SCP0, SCP1 » SCR0..2 bits de selección del preescalado bit de selección del divisor 92 SISTEMAS EMPOTRADOS Línea serie asíncrona, SCI Inicialización SCC1: registro de control » ENSCI = 1 SCI habilitada SCC2: registro de control » TE = 1 habilitación de la transmisión » RE = 1 habilitación de la recepción 93 SISTEMAS EMPOTRADOS Línea serie asíncrona, SCI Interrupciones Reg. De control SCC2 Reg. De estado SCS1 Interrupción Flag Habilit. Borrado flag Transmisor vacío SCTE SCTIE Leer SCS1 (con SCTE=1), escribir en SCDR Transmisión completa TC TCIE Automáticamente cuando hay un nuevo dato a enviar Receptor lleno SCRF SCRIE Leer SCS1 (con SCRF=1), leer SCDR Receptor vacío IDLE ILIE Leer SCS1 (con IDLE=1), leer SCDR 94 SISTEMAS EMPOTRADOS Línea serie asíncrona, SCI Formato de transmisión Reg. SCC1 » M long. de carácter – M=0 8 bits – M=1 9 bits » PEN habilitación de paridad » PTY tipo de paridad Reg. SCC3 » R8 bit adicional en recepción » T8 bit adicional en transmisión 95 SISTEMAS EMPOTRADOS Módulo base de tiempo, TBM TBM Time Base Module Generación de interrupciones periódicas Frecuencia configurable 96 SISTEMAS EMPOTRADOS Módulo base de tiempo, TBM Activación y control TBIF Time base interrupt flag » TBIF = 1 TACK registro TBCR interrupción pendiente Time base ACKnowledge » Escritura de un “1” TBIE TBON borrado del flag Habilitación de la interrupción Habilitación del módulo 97 SISTEMAS EMPOTRADOS Módulo base de tiempo, TBM Selección de la frecuencia registro TBCR Bits TBR0..TBR2 Ejemplo de selección con un reloj externo de 32 kHz 98 SISTEMAS EMPOTRADOS Otros módulos Computer Operating Properly (COP) Monitor ROM (MON) Si no se reinicializa antes de un cierto tiempo provoca un RESET Permite la puesta a punto de un programa en el “tarjet” Mecanismo de seguridad Programa residente en ROM Low-Voltage Inhibit (LVI) Provoca un RESET si la alimentación desciende por debajo de un cierto umbral System Integration Module (SIM) Controla todas las actividades del µC Módulo de integración Comunicaciones mediante línea serie (PTA0) Break Module (BRK) Permite el uso de un breakpoint hardware (puesta a punto) Genera una SWI Registro de configuración Habilitación de: COP, LVI, instrucción de STOP Configuración de: frecuencia del COP, LVI, fuente del reloj para la SCI 99 SISTEMAS EMPOTRADOS Resumen Interrupciones Flags y su borrado Source Flag Mask Enable Acknowledge bit IRQ pin IRQF IMASK TIM1 channel 0 CH0F CH0IE Read T1SC0 & CH0F=0 TIM1 channel 1 CH1F CH1IE Read T1SC1 & CH1F=0 TIM1 overflow TOF TOIE TIM2 channel 0 CH0F CH0IE Read T2SC0 & CH0F=0 TIM2 channel 1 CH1F CH1IE Read T2SC1 & CH1F=0 TIM2 overflow TOF TOIE SPI receiver full SPRF SPRIE Read SPSCR & read SPDR SPI transmitter empty SPTE SPTIE Write SPDR SCI receiver full SCRF SCRIE Read SCS1 & read SCDR SCI input idle IDLE ILIE Read SCS1 & read SCDR SCI transmitter empty SCTE SCTIE Read SCS1 & write SCDR SCI transmission complete TC TCIE Keyboard pin KEYF ADC conversion complete COCO AIEN Timebase TBIF TBIE ACK IMASKK Borrado flag Vector fetch/ACK=1 Read T1SC & TOF=0 Read T2SC & TOF=0 Write SCDR ACKK Vector fetch/ACKK=1 TACK TACK = 1 100 SISTEMAS EMPOTRADOS SISTEMAS EMPOTRADOS El TMS320F2812 101 SISTEMAS EMPOTRADOS DESCRIPCIÓN GENERAL Características básicas: Frecuencia de bus MHz máx. 150 Alimentación 3.3 V » CPU 1.8 V Comunicación serie: SPI, SCI, CAN y McBSP Conversor AD con 16 canales y 12 bits Dos event managers Memoria interna: 128K flash, 1K OTP ROM, 16K RAM » Generación PWM Arquitectura harvard » Input capture, output compare » 3 buses (1 programa + 2 datos) » Bus datos 32 bits » Bus direcciones: » Lectura encoders Tres estados de bajo consumo: IDLE, STANBY y HALT Instrucción MAC – 32 bits (datos) CPU segmentada – 22 bits (programa) Tres Timers de 32 bits Módulo de generación de reloj con PLL Interrupciones vectorizadas con prioridades 56 pines de entrada/salida digital SISTEMAS EMPOTRADOS DESCRIPCIÓN GENERAL Diagrama de bloques 102 SISTEMAS EMPOTRADOS DESCRIPCIÓN GENERAL Mapa de memoria 103 104 SISTEMAS EMPOTRADOS DESCRIPCIÓN GENERAL Low Power Modes (modos de bajo consumo) IDLE » CPU queda en bajo consumo » Se puede seleccionar los periféricos que continúan funcionando » Salida del modo: RESET o interrupción (externa o periférico) STANDBY » CPU y periféricos apagados (sin reloj) » El oscilador, el wachdog y el PLL siguen funcionando » Salida del modo: RESET, wachdog, señales externas seleccionables e interrupción externa no enmascarable HALT » CPU y periféricos apagados (sin reloj) » Oscilador y PLL apagados » Salida del modo: RESET e interrupción externa no enmascarable » Modo de menor consumo todo el DSP inactivo 105 SISTEMAS EMPOTRADOS DESCRIPCIÓN GENERAL Encapsulados 179-Ball GHH (12x12 mm) 176-Pin PGF LQFP (24x24 mm) 106 SISTEMAS EMPOTRADOS DESCRIPCIÓN GENERAL Familia 2000 Parametric C28x Fixed-Point DSPs C24x Fixed-Point DSPs MHz 150 20 - 40 MIPS 150 20 - 40 Special Instructions/Capabilities C/C++ Efficient, Code Compatible with C24x Devices Code Compatible with C28x Devices Pricing (10kU) $17.98 to $22.99 $2 to $14.64 Peripherals /Coprocessors 128K or 64K Flash, 12-bit ADC, Multichanneled Buffered Serial Port (McBSP), 2 UARTs, 2 Event Managers, Enchanced Controller Area Network (eCAN) Communication Controller, SPI, 56 GPIO, Watch Dog Timer 32K, 16K or 8K Flash, 10bit ADC, SPI, UART, 2 Event Managers, Controller Area Network (CAN), Communication Controller 107 SISTEMAS EMPOTRADOS C28x CPU Características básicas Hasta 150 MHz de frecuencia ALU de 32 bits, coma fija MAC y multiplicación de 32x32 bits resultado de 64 bits Pipeline de 8 etapas Buses (harvard) » Buses de dirección – PAB Program address bus (22-bit). – DRAB Data-read address bus (32-bit). – DWAB Data-write address bus (32-bit). » Buses de datos – PRDB Program-read data bus (32-bit). – DRDB Data-read data bus (32-bit). – DWDB Data-/Program-write data bus (32-bit). 108 SISTEMAS EMPOTRADOS C28x CPU Diagrama de la CPU Registros Acumulador ACC (32 b) 8 reg auxiliares XAR0..7 (32 b) Contador de progr. PC (22 b) Registro de vuelta RPC (22 b) Puntero de pila SP (16 b) Control de interrupciones IFR, IER, DBGIER (16 b) Reg. de estado ST0..1 (16 b) Reg. de producto P, XT (32 b) Puntero de página DP (16 b) 109 SISTEMAS EMPOTRADOS C28x CPU Pipeline Fetch: F1 (PC bus direcciones), F2 (lectura instrucción) Decode: D1, D2 Read: R1 (dirección dato bus), R2 (lectura dato) Execute: E Write: W (escritura del resultado) 110 SISTEMAS EMPOTRADOS C28x CPU Modos de direccionamiento Directo: DP (data page) + desplazamiento de 6 ó 7 bits Sobre el puntero de pila » SP + desplazamiento de 6 bits » Pre-decremento o post-incremento de SP Indirecto sobre un registro auxiliar » XARx dirección de un dato » XARx + desplazamiento de 3 bits » XARx + desplazamiento XARi » Post-incremento o pre/post-decremento de XARx Registro » Un registro es el origen o destino del dato 111 SISTEMAS EMPOTRADOS C28x CPU Conjunto de instrucciones Para el procesado digital de señal » Multiplicación – 16 bits x 16 bits resultado 32 bits – 32 bits x 32 bits resultado » 32 bits de la parte alta » 32 bits de la parte baja » Multiplica y acumula – 16 bits x 16 bits MAC resultado 32 bits – 32 bits x 32 bits MAC resultado » 32 bits de la parte alta » 32 bits de la parte baja 112 SISTEMAS EMPOTRADOS Reloj y PLL Fuente de reloj para el DSP Reloj externo a la frecuencia de trabajo Reloj externo + PLL multiplicador de la frecuencia 113 SISTEMAS EMPOTRADOS Reloj y PLL Posibilidades de reloj externo 20 MHz .. 35 MHz Posibles conexiones PLL programado por el registro PLLCR 114 SISTEMAS EMPOTRADOS Reloj Se puede habilitar el reloj de cada periférico independientemente 115 SISTEMAS EMPOTRADOS Reloj Habilitación reloj periférico Peripheral Clock Control (PCLKCR) Register 116 SISTEMAS EMPOTRADOS Reloj Preescalado del reloj de los periféricos Low-Speed Peripheral Clock Prescaler (LOSPCP) Register High-Speed Peripheral Clock Prescaler (HISPCP) Register 117 SISTEMAS EMPOTRADOS Interrupciones Características básicas La CPU soporta » NMI interrupción no enmascarable » INT1..INT14, RTOSINT, DLOGINT 16 interrupciones enmascarables » Interrupciones software no enmascarables Tabla de 128 vectores diferentes de interrupción » Sólo 76 efectivas Reset Interrupciones software » 12 de usuario USER0..USER11 (traps) ILLEGAL ilegal código de instrucción Interrupciones externas a la CPU » 96 posibles fuentes multiplexadas en 12 grupos de 8 interrupciones – Cada grupo activa una interrupción de la CPU (INT1..INT12) – 41 de los periféricos – 1 Watchdog – 2 interrupciones externas XINT1 y XINT2 – 1 timer 0 – Resto no conectadas » Interrupción externa XINT13 NMI o INT13 » Timer 2 INT14 (uso por RTOS) » Timer 1 INT13 (uso por RTOS) 118 SISTEMAS EMPOTRADOS Interrupciones RESET Fuentes » Encendido » Pin de RESET RS Acciones » Detiene todas las operaciones en curso y vacía la pipeline » Inicializa el valor de ciertos registros » Carga en el PC el contenido del vector de RESET – 0x3F FFC0 situado en ROM – Salto a InitBoot. Según el estado de algunos pines: » Salto a la Flash 0x3F 7FF6 (debe contener un salto al comienzo del programa) » Salto a H0 SRAM 0x3F 8000 » Salto a la memoria OTP 0x3D 7800 » Ejecución de una rutina de carga 119 SISTEMAS EMPOTRADOS Interrupciones Esquema de las fuentes de interrupción 120 SISTEMAS EMPOTRADOS Interrupciones PIE (Periferal Interrupt Expansion) Multiplexa 96 interrupciones en únicamente 12 (INT1..INT12) que son entregadas a la CPU Permite un vector de interrupción individual para cada una Flag y habilitación individual 121 SISTEMAS EMPOTRADOS Interrupciones PIE 122 SISTEMAS EMPOTRADOS Interrupciones Habilitación y flags de interrupciones Máscara general de las interrupciones enmascarables (registro de estado ST1) INTM » INTM = 0 interrupciones globalmente no enmascaradas – asm(" clrc INTM ; Enable global interrupts"); » INTM = 1 interrupciones globalmente enmascaradas – asm(" setc INTM ; Mask global interrupts"); Dos niveles de habilitación y flags » Nivel CPU » Nivel PIE interrupciones INT1..INT14 96 interrupciones agrupadas en 12 grupos de 8 123 SISTEMAS EMPOTRADOS Interrupciones Nivel de CPU Habilitación » Registro IER (Interrupt Enable Register) » INTx = 1 habilitada Flag » Registro IFR (Interrupt Flag Register) » INTx = 1 interrupción pendiente Ambos registros (16 bits) tienen la misma estructura 124 SISTEMAS EMPOTRADOS Interrupciones Nivel PIE Habilitación global del PIE ENPIE = 1 en el registro PIECTRL Agradecimiento de una interrupción de un bloque de 8 » Registro PIEACK » PIEACKx = 1 interrupción pendiente en el bloque x, no se pasan nuevas interrupciones a la CPU » Borrado escritura por la aplicación de un 1 en el correspondiente bit 125 SISTEMAS EMPOTRADOS Interrupciones Nivel PIE Un registro de habilitación para cada bloque de 8 » PIEIERx (x = 1..12) » PIEIERx.y = 1 interrupción habilitada Un registro de flag para cada bloque de 8 » PIEIFRx (x = 1..12) » PIEIFRx.y = 1 interrupción pendiente Ambas clases de registros (16 bits) tienen la misma estructura 126 SISTEMAS EMPOTRADOS Interrupciones Interrupciones externas XINT1 y XINT2 » Cada una tiene un registro de habilitación y configuración XINTxCR » Enable = 1 interrupción habilitada » Polarity = 0 flanco de bajada » Polarity = 1 de subida flanco NMI » Registro de configuración XNMICR » Enable y Polarity idem. » Select = 0 origen Timer 1 » Select = 1 origen XNMI 127 SISTEMAS EMPOTRADOS Interrupciones Respuesta a una interrupción del PIE Por defecto no se permiten interrupciones encajadas Los flags de la CPU y del PIE son borrados de forma automática El borrado del PIEACKx debe hacerlo la rutina de interrupción La pipeline es vaciada » Se completan las instrucciones decodificadas » El resto se eliminan SISTEMAS EMPOTRADOS Entradas/salidas paralelas, GPIO 56 pines I/O todos bidireccionales Organizados en 5 puertos A,B,D,E,F,G Pullup o pulldown interno Compartidos con otros periféricos Acciones sobre cada línea » Set » Clear » Toggle » Read » Write Filtrado de ruido » Qualification 128 129 SISTEMAS EMPOTRADOS Entradas/salidas paralelas, GPIO Port pins MUX direc. qualif. set clear toggle data Peripheral A 16 GPAMUX GPADIR GPAQUAL GPASET GPACLEAR GPATOGGLE GPADAT EV-A B 16 GPBMUX GPBDIR GPBQUAL GPBSET GPBCLEAR GPBTOGGLE GPBDAT EV-B D 4 GPDMUX GPDDIR GPDQUAL GPDSET GPDCLEAR GPDTOGGLE GPDDAT EV-A EV-B E 3 GPEMUX GPEDIR GPEQUAL GPESET GPECLEAR GPETOGGLE GPEDAT Ext. Int. F 15 GPFMUX GPFDIR - GPFSET GPFCLEAR GPFTOGGLE GPFDAT SPI, SCI, CAN, McBSP G 2 GPGMUX GPGDIR - GPGSET GPGCLEAR GPGTOGGLE GPGDAT SCI 130 SISTEMAS EMPOTRADOS Entradas/salidas paralelas, GPIO Puerto A (similarmente B, D, E, F, G) GPAMUX » GPAMUXx = 0 GPIOAx (GPIO pin) » GPAMUXx = 1 Periférico GPADIR » GPADIRx = 0 Entrada » GPADIRx = 1 Salida GPASET, GPACLEAR, GPATOGGLE » Escritura BITx = 1 Acción » Escritura BITx = 0 sin efecto GPADAT » Pin de entrada » Pin de salida la lectura devuelve el estado lógico del pin la escritura fuerza el estado lógico del pin 131 SISTEMAS EMPOTRADOS Event Manager, EV-A y EV-B Características generales Dos módulos independientes e iguales EV-A y EV-B Funciones de cada módulo » Input Capture » Output Compare » Generación de señales PWM (hasta 8 por módulo) » Lectura de encoders (Quadrature-Encoder Pulses) » Generación de periodos de muestreo para el ADC » Interrupciones diversas Elementos de cada módulo » 2 timers (up/down) de 16 bits – frecuencia CLOCK_CPU..CLOCK_CPU/128 » Varios registros de comparación » 2 registros de periodo » Lógica QEP, unidad de captura PWM, OC 132 SISTEMAS EMPOTRADOS Event Manager, EV-A y EV-B Interfase SISTEMAS EMPOTRADOS Event Manager, EV-A y EV-B Estructura interna 133 134 SISTEMAS EMPOTRADOS Event Manager, EV-A y EV-B Habilitación y configuración de los timers de propósito general 4 timers Tx (x = 1..4) » T1 y T2 en EV-A TPS2TPS0 Frec. Tick x = 150 MHz » T3 y T4 en EV-B 000 x/1 6.66 ns 001 x/2 13.3 ns 010 x/4 26.6 ns 011 x/8 53.3 ns 100 x/16 106.6 ns 101 x/32 213.3 ns 110 x/64 426.6 ns 111 x/128 853.3 ns Cada Tx » 1 registro contador TxCNT (16 bits) » 1 registro de periodo TxPR (16 bits) » 1 registro de control TxCON – Preescalado TPS2-TPS0 – Modo de operación – Habilitación TMODE1-TMODE0 TENABLE = 1 x = Frecuencia de reloj de la CPU 135 SISTEMAS EMPOTRADOS Event Manager, EV-A y EV-B Modos de operación de los timers de propósito general TMODE1TMODE0 Modo Descripción 00 Stop/Hold Contador parado 01 Continous-Up/-Down Cuenta hacia arriba hasta el periodo cuenta hacia abajo hasta 0 sigue contando hacia arriba 10 Continous-Up Cuenta hacia arriba hasta el periodo TxCNT = 0 sigue contando 11 Directional-Up/-Down Cuenta hacia arriba o hacia abajo según el valor de del pin TDIRA/B 136 SISTEMAS EMPOTRADOS Event Manager, EV-A y EV-B Interrupciones de los timers de propósito general Overflow » Flag TxCNT = 0xFFFF T1OFINT (bit 10) del registro EVAIFRA (overflow del T1) » Habilitación TxCNT = 0x0000 Underflow » Flag T1UFINT (bit 9) del registro EVAIFRA (underflow del T1) » Habilitación Period match » Flag T1OFINT (bit 10) del registro EVAIMRA (overflow del T1) T1UFINT (bit 9) del registro EVAIMRA (underflow del T1) TxCNT = TxPR T1PINT (bit 7) del registro EVAIFRA (period match del T1) » Habilitación T1PINT (bit 7) del registro EVAMFRA (period match del T1) Borrado de los flags escribiendo un 1 137 SISTEMAS EMPOTRADOS Event Manager, EV-A y EV-B Función de comparación Registro Evento TxCMPR (16 bits) TxCNT = TxCMPR Esta función está asociada a una salida del DSP » TxPWM_TxCMP » Cada vez que se produce la igualdad cambio del valor de la salida » Cuando el TxCNT alcanza el periodo cambio del valor de la salida » Así puede generar un PWM – Compare – Period Ton Periodo del PWM 138 SISTEMAS EMPOTRADOS Event Manager, EV-A y EV-B Función de comparación Habilitación » Registro de control del EV-A/-B – TCMPOE = 1 – TxCMPOE = 1 GPTCONA salidas del módulo A/B sensibles a las comparaciones salida de comparación del Tx habilitada » Registro de control TxCON – TECMPR = 1 Habilitación de la comparación Interrupción cuando se produce la comparación » Flag T1CINT en EVAIFRA y T2CINT en EVAIFRB (idem para T3 y T4) » Habilitación y T4) T1CINT en EVAIMRA y T2CINT en EVAIMRB (idem para T3 139 SISTEMAS EMPOTRADOS Event Manager, EV-A y EV-B Generación de un periodo de muestreo para el conversor AD Habilitación y configuración en los registros GPTCONA y GPTCONB » Pareja de bits TxTOADC TxTOADC Descripción 00 Activación ADC deshabilitada 01 Toma muestra en underflow de Tx 10 Toma muestra al alcanzar el periodo el Tx 11 Toma muestra en el compare del Tx 140 SISTEMAS EMPOTRADOS Event Manager, EV-A y EV-B PWM Además del PWM que puede generar cada GPT cada módulo posee tres registros de comparación espacializados en PMW Cada uno gestiona dos salidas de la otra) PWMi y PWMi+1 (una es la inversa Registros » Activación » Comparación bits CENABLE, FCMPOE, FCNP(1,2,3)OE en COMCON-A/-B CMPRx Características adicionales deadband, generación automática de las tres fases para motores de alterna 141 SISTEMAS EMPOTRADOS Event Manager, EV-A y EV-B Función Input Capture Tres registros de captura por cada módulo (A y B) Cada una captura una entrada CAPx (x = 1..3) del TxCNT CAP(1,2,3)FIFO se almacena el valor Sensible a flancos de subida o de bajada o a ambos » Configuración CAPCONA / B Posibilidad de generación de interrupciones » Habilitación » Flags EV(A,B)IMRC EV(A,B)IFRC Función lectura de encoder Quadrature Encoder Pulse (QEP) Circuit Multiplexado con la unidad de captura Control de posición y velocidad de motores 142 SISTEMAS EMPOTRADOS Convertidor analógico-digital, ADC Características generales 12 bits de conversión 1 convertidor 16 canales Entrada analógica 0..3 V Tiempo de conversión » Maximo 200 ns 16 registros de resultado de 16 bits Autosecuenciamiento de canales Diversas fuentes de comienzo de conversión Valor _ Digital = 4095 × Voltaje _ entrada − ADCLO 3 SISTEMAS EMPOTRADOS Convertidor analógico-digital, ADC Diagrama de bloques 143 144 SISTEMAS EMPOTRADOS Convertidor analógico-digital, ADC Secuenciadores Dos grupos de 8 canales independientes » Cada uno con su sample-and-hold » Cada uno con su secuenciador Los dos secuenciadores pueden funcionar independientes (SEQ1 y SEQ2) o encadenados (SEQ) Los secuenciadores indican qué canales y en qué orden se convierten cada vez que se inicia una conversión Para cada SEQx » Número de canales a convertir cada vez que se inicia una conversión MAXCONV » Orden de los canales – CHSELSEQ1 CONV00 – CONV03 – CHSELSEQ2 CONV04 – CONV07 – CHSELSEQ3 CONV08 – CONV11 – CHSELSEQ4 CONV12 – CONV15 SISTEMAS EMPOTRADOS Convertidor analógico-digital, ADC Diagrama SEQ 145 146 SISTEMAS EMPOTRADOS Convertidor analógico-digital, ADC Dos modos Conversión continua se pone los secuenciadores en bucle y las conversiones no se detienen Start-stop A la llegada de un señal de inicio de conversión se convierten únicamente el número de canales indicado en MAXCONV Inicio de conversión, SOC Por software SEQ1, SEQ2, SEQ EVA SEQ1, SEQ EVB SEQ2, SEQ Pin de entrada GPIOE1/XINT2_ADCSOC Interrupciones Fin de las conversiones de un secuenciador SEQ1, SEQ 147 SISTEMAS EMPOTRADOS Convertidor analógico-digital, ADC Habilitación y configuración ADCTRL1 » CONT RUN = 1 modo conversión continua » SEQ CASC = 1 en cascada ADCTRL3 SEQ1 y SEQ2 encendido del ADC » ADCRFDN = 1, ADCBGDN = 1 5 ms ADCPWDN = 1 ADC_ST_FLG » INT SEQx CLEAR escritura de un 1 borrado del flag » INT SEQx flag ADCTRL2 » EVB SOC SEQ habilitación del SOC del SEQ por EVB » RST SEQx RESET del secuenciador » SOC SEQx SOC por software » INT ENA SEQx = 1 interrupción habilitada » EXT SOC SEQ1 = 1 SOC por señal externa habilitada » EVA SOC SEQ1 = 1 habilitación del SOC de SEQ1 por EVA » EVB SOC SEQ2 = 1 habilitación del SOC de SEQ2 por EVB 148 SISTEMAS EMPOTRADOS 32 bits CPU timers El DSP posee tres timers adicionales a los de EV-A/-B TIMER0 utilizable por el usuario TIMER1 y TIMER2 real reservados para sistemas operativos de tiempo Los tres tienen la misma estructura 149 SISTEMAS EMPOTRADOS 32 bits CPU timers Estructura y funcionamiento Permiten la generación de interrupciones periódicas tiempos base de 150 SISTEMAS EMPOTRADOS 32 bits CPU timers Configuración Registro de control » TIE = 1 » TIF » TRB TIMERxTCR interrupción habilitada flag de la interrupción reinicilización del timer al escribir un 1 » TSS = 1 el timer se detiene 151 SISTEMAS EMPOTRADOS 32 bits CPU timers Programación Preescalado TIMERxTPR/TPRH » Escribir en TDDR y TDDRH el valor del prescalado (número de ticks de CPU que tiene un tick del timer) » PSC y PSCH es el contador Periodo » Escribir en TIMERxPRD y TIMERxPRDH el valor del periodo (en ticks del timer) SISTEMAS EMPOTRADOS Multichannel Buffered Serial Port, McBSP Características básicas Comunicación serie síncrona Interfase directa con conversores y codecs comerciales Comunicación full-duplex 128 canales No DMA » Colas FIFO de recepción y transmisión de 16 posiciones Varios tamaños de datos: 8, 12, 16, 20, 24 y 32 bits Posibilidad de compresión de datos » A-law » µ-law Interrupciones 152 SISTEMAS EMPOTRADOS Multichannel Buffered Serial Port, McBSP Diagrama 153 SISTEMAS EMPOTRADOS Multichannel Buffered Serial Port, McBSP Comunicación serie síncrona Tamaño de dato enviado configurable 8, 12, 16, 20, 24 y 32 bits Los datos de agrupan en tramas de longitud fija » Frame » Uno o varios datos Sincronización en bit (reloj) y en trama Reloj configurable 154 155 SISTEMAS EMPOTRADOS Multichannel Buffered Serial Port, McBSP Comunicación multicanal Cada trama es dividida en rodajas temporales » Rodaja un dato (8, 12, 16, 24, 32 bits) » Canal = rodaja La línea serie es multiplexada en el tiempo en diversos canales Hasta 128 canales El McBSP puede transmitir o recibir en únicamente los canales activos 156 SISTEMAS EMPOTRADOS Otros periféricos Resto de periféricos y módulos del TMS320F2812 Serial Port Interface SPI Serial Communications Interface Enhanced Controller Area Network Code Security Module SCI eCAN CSM Watchdog Breakpoint Functions and Real-Time Debug via Hardware » Interfase JTAG 157 SISTEMAS EMPOTRADOS SISTEMAS EMPOTRADOS Herramientas de desarrollo 158 SISTEMAS EMPOTRADOS Introducción Tipo de desarrollo Desarrollo nativo. La aplicación se desarrolla en el mismo computador donde se va a ejecutar Desarrollo cruzado. La aplicación se desarrolla en un computador diferente (“host”) a la plataforma de ejecución (“target”) Localización del código La plataforma de ejecución tiene bancos de memoria con diferentes tecnologías (RAM, ROM, PROM, FLASH ...) en direcciones concretas de memoria Al no existir SO es preciso establecer dónde se ubicarán programa y datos. 159 SISTEMAS EMPOTRADOS Introducción Uso de C y Ensamblador Programación en C » Puesta a punto de la lógica del programa Reescritura de algunas partes críticas en ensamblador » Disminución de la ocupación de memoria Fuente Ensamblador Fuente C Compilador Cruzado Ensamblador Cruzado Objeto Relocalizable Objeto Relocalizable Librerías » Aumento de las prestaciones Fichero Configuración Montador de Enlaces Ejecutable No Relocalizable Cargador Máscara Microcontrolador DSP 160 SISTEMAS EMPOTRADOS Introducción Requisitos de un lenguaje para la programación de µC Acceso directo a memoria y hardware para lectura y escritura » Programación de periféricos Posibilidad de llamar a rutinas en ensamblador o insertar código máquina Conexión directa con interrupciones » La mayoría de la aplicaciones basarán gran parte de su funcionamiento en interrupciones » Prestaciones, carácter asíncrono de los eventos Generación de código eficiente en ocupación de memoria y velocidad de ejecución » Se dispone de poca memoria Lenguaje C extendido para sistemas empotrados 161 SISTEMAS EMPOTRADOS El “C” para Sistemas Empotrados Cualificadores acceso Especificadores clase almacenamiento const extern El contenido de la variable no debe ser modificado por el programa indica al compilador que la variable puede almacenarse en ROM en pasos por referencia a funciones indica que la función no modifica el valor pasado volatile El valor de la variable puede ser cambiado sin que se indique explícitamente en el fuente volatile char variableLeidaExterior; char B; ... for (i=0; i<1000; i++){ B=variableLeidaExterior } La variable/función declarada está definida en fuera del fichero. En tiempo de enlazado se conocerá la ubicación definitiva. static.- Especifica 3 conceptos diferentes: En variables locales, indica que se almacenan en el segmento de datos y no en la pila. Se hace una reserva permanente para toda la vida del programa. Mantiene el valor entre llamadas En variables globales indica que la variable NO ES VISIBLE fuera del fichero donde está definida En funciones indica que la función NO ES VISIBLE fuera del fichero donde está definida 162 SISTEMAS EMPOTRADOS El “C” para Sistemas Empotrados Union Estructura de datos para darle 2 interpretaciones distintas a una misma zona de la memoria declaración/definición » definir los campos en una plantilla » definir/declarar una variable que emplea la plantilla » ejemplo int entero; typedef union { int entero; struct{ 0x35 unsigned char hi; unsigned char lo; }bytes; }unionEntero; unionEntero miEntero; struct word{ int otroEntero; unsigned char hi; ... unsigned char lo; miEntero.bytes.lo=0x40; }; miEntero.bytes.hi=0x35; otroEntero=miEntero.entero; /* otroEntero vale 0x3540*/ 0x40 163 SISTEMAS EMPOTRADOS El “C” para Sistemas Empotrados Manejo de bits individuales acceso mediante máscaras, forma tradicional de acceso » forzado de un solo bit a “1” registro |= mascara; » forzado de un solo bit a “0” registro &= mascara; #define BIT_3 0x04 ... registro |= BIT_3; #define BIT_3 0x04 ... registro &= ~BIT3; campos de bits, tipo de dato específico en C para acceso a bits. typedef struct { unsigned bit_0:1; unsigned bit_1:1; unsigned bit_2:1; unsigned bit_3:1; unsigned nibble:4; }campoBits; ... campoBits miRegistro; miRegistro.bit_0=1; miRegistro.nibble=0x06; 164 SISTEMAS EMPOTRADOS Desarrollo para el 68HC08 Entorno de desarrollo formado por: CodeWarrior (Metrowerks) » Edición, gestión de proyectos, configuración » Compilador C » Ensamblador » Linker » Debugger sobre código fuente C M68ICS08GP In-Circuit Simulator » Contiene un 68HC908GP32 » Carga y ejecución de código » Programación de la memoria FLASH » Un breakpoint por hardware en FLASH » Comunicación por RS232 » Gestión del modo MONITOR » Accesibilidad de los puertos 165 SISTEMAS EMPOTRADOS Desarrollo para el TMS320F2812 Entorno de desarrollo formado por: Code Composer (Texas Instruments) eZdsp F2812 (Digital Spectrum) » Contiene un TMS320F2812 » Carga y ejecución de código » Edición, gestión de proyectos, configuración » Programación de la memoria FLASH » Compilador C » Dos breakpoints por hardware » Ensamblador » Comunicación por línea paralelo » Linker » Controlador IEEE 1149.1 JTAG » Debugger sobre código fuente C » Accesibilidad de los puertos » Entrada y salida de datos (simulación de E/S hardware) » Memoria RAM externa adicional » Análisis de código: tiempos de cómputo, accesos, … » Sistema operativo de tiempo real: DSPBIOS 166 SISTEMAS EMPOTRADOS CodeWarrior Fichero de cabecera 68hc08gp32.h /***************************************************** 6808gp32.h - Target interface library Describes I/O registers of MC68HC08GP20 ---------------------------------------------------Copyright (c) Metrowerks, Basel, Switzerland *****************************************************/ … #ifndef __DECL__68HC08GP32_H__ #define __DECL__68HC08GP32_H__ #endif extern #pragma MESSAGE DISABLE C1106 /* WARNING C1106: Non-standard bitfield type */ #define _IO_BASE_ADDR 0 #define _IO_AT(x) @(_IO_BASE_ADDR+(x)) #include <stdtypes.h> /*******************************************************************************************/ /* DEFINE PORT A */ /*******************************************************************************************/ __DECL__68HC08GP32_H__ volatile unsigned char PTA __DECL__68HC08GP32_H__ volatile unsigned char DDRA _IO_AT(0x04); /* data direction port A */ … _IO_AT(0x00); /* port A */ 167 SISTEMAS EMPOTRADOS CodeWarrior Fichero de cabecera 68hc08gp32 … /*****************************************************************************************/ /* DEFINE PORT C */ /*****************************************************************************************/ /****Port Register C******/ __DECL__68HC08GP32_H__ volatile struct { unsigned char _PTC0:1; unsigned char _PTC1:1; … unsigned char _PTC5:1; unsigned char _PTC6:1; unsigned char BIT7:1; } PTC_BITS; unsigned char PTC_BYTE; }PTC1_ _IO_AT(0x02); /* DEFINE REGISTER */ #define PTC PTC1_.PTC_BYTE /*DEFINE REGISTER BITS*/ #define PTC0 PTC1_.PTC_BITS._PTC0 #define PTC1 PTC1_.PTC_BITS._PTC1 … #define PTC5 PTC1_.PTC_BITS._PTC5 #define PTC6 PTC1_.PTC_BITS._PTC6 union { 168 SISTEMAS EMPOTRADOS CodeWarrior Fichero de cabecera 68hc08gp32 … /****Data Direction Register C******/ __DECL__68HC08GP32_H__ volatile union { struct { unsigned char _DDRC0:1; unsigned char _DDRC1:1; … unsigned char _DDRC5:1; unsigned char _DDRC6:1; unsigned char BIT7:1; } DDRC_BITS; unsigned char DDRC_BYTE; }DDRC1_ _IO_AT(0x06); /* DEFINE REGISTER */ #define DDRC DDRC1_.DDRC_BYTE /*DEFINE REGISTER BITS*/ #define DDRC0 DDRC1_.DDRC_BITS._DDRC0 #define DDRC1 DDRC1_.DDRC_BITS._DDRC1 … #define DDRC5 DDRC1_.DDRC_BITS._DDRC5 #define DDRC6 DDRC1_.DDRC_BITS._DDRC6 … 169 SISTEMAS EMPOTRADOS CodeWarrior Programación de interrupciones “interrupt” indica al compilador que la función es una rutina de interrupción » Sin parámetros y no devuelve nada » RTI al final El número indica el vector interrupción correspondiente void interrupt 17 Tick (void) { TACK=1; tick_counter ++ ; return ; } Source Reset SW Iinstruction IRQ pin CGM(PLL) TIM1 channel 0 TIM1 channel 1 TIM1 overflow TIM2 channel 0 TIM2 channel 1 TIM2 overflow SPI receiver full SPI overflow SPI modefault SP transmitter empty SCI receiver overrun SCI noise fag SCI raming error SCI parity error SCI receiver full SCI input idle SCI transmitter empty SCI transmission complete Keyboard pin ADC conversion complete Timebase Flag None None IRQF PLLF CH0F CH1F TOF CH0F CH1F TOF SPRF OVRF MODF SPTE OR NF FE PE SCRF IDLE SCTE TC KEYF COCO TBIF Mask None None IMASK PLLIE CH0IE CH1IE TOIE CH0IE CH1IE TOIE SPRIE ERRIE ERRIE SPTIE ORIE NEIE FEIE PEIE SCRIE ILIE SCTIE TCIE IMASKK AIEN TBIE INT Register Flag Priority VectorAddress None 0 $FFFE–$FFFF None 0 $FFFC–$FFFD IF1 1 $FFFA–$FFFB IF2 2 $FFF8–$FFF9 IF3 3 $FFF6–$FFF7 IF4 4 $FFF4–$FFF5 IF5 5 $FFF2–$FFF3 IF6 6 $FFF0–$FFF1 IF7 7 $FFEE–$FFEF IF8 8 $FFEC–$FFED IF9 9 $FFEA–$FFEB Code Warrior Int Num 1 2 3 4 5 6 7 8 9 10 IF10 IF11 10 11 $FFE8–$FFE9 $FFE6–$FFE7 11 12 IF12 12 $FFE4–$FFE5 13 IF13 13 $FFE2–$FFE3 14 IF14 IF15 IF16 14 15 16 $FFE0–$FFE1 $FFDE–$FFDF $FFDC–$FFDD 15 16 17 170 SISTEMAS EMPOTRADOS CodeWarrior Inline Assembler El compilador de C permite la introducción de instrucciones en ensamblador intercaladas en el código “C” Hay acciones que sólo se pueden hacer desde ensamblador Varias posibilidades » "asm" <Assembly Instruction> ";" ["/*" Comment "*/"] » "asm" " (" <Assembly Instruction> ";" ["/*" Comment "*/"] ")" ";“ » "asm" "{“ { <Assembly Instruction> [";" Comment] "\n" } "}" … TBIE = 1 ; asm cli ; /* desenmascarado de las interrupciones */ return ; } 171 SISTEMAS EMPOTRADOS CodeWarrior Secciones de un programa ROM .text Código del programa. .rodata .rodata1 Constantes. Strings. .copy Inicializadores de variables. .startData Datos empleados por la rutina startup al comienzo del programa. .init Punto de entrada del programa, rutinas de inicialización Secciones de un programa RAM .data .bss .stack variables inicializadas variables no inicializadas pila 172 SISTEMAS EMPOTRADOS CodeWarrior Pragmas directivas al compilador #pragma CODE_SEG /* in a header file */ #pragma CODE_SEG MY_CODE1 extern void f(void); #pragma CODE_SEG MY_CODE2 extern void h(void); #pragma CODE_SEG DEFAULT /* in the corresponding C file : */ #pragma CODE_SEG MY_CODE1 void f(void){ h(); } #pragma CODE_SEG MY_CODE2 void h(void){ f(); } #pragma CODE_SEG DEFAULT 173 SISTEMAS EMPOTRADOS CodeWarrior #pragma DATA_SEG /* in a header file */ #pragma DATA_SEG CUSTOM_MEMORY extern int j_custom; #pragma DATA_SEG DEFAULT /* in the corresponding C file : */ #pragma DATA_SEG CUSTOM_MEMORY int j_custom; #pragma DATA_SEG DEFAULT void main(void) { j_custom = 5; } 174 SISTEMAS EMPOTRADOS CodeWarrior #pragma INLINE int i; #pragma INLINE static void foo(void) { i = 12; } void main(void) { foo(); // results into `i = 12;' } 175 SISTEMAS EMPOTRADOS CodeWarrior Inicialización La aplicación debe ser enlazada con una función predefinida del entorno Startup » Se encuentra en el fichero Start08.c » Inicializa el puntero de pila » Escribe ceros en las posiciones de las variables no inicializadas (.bss) » Copia los valores correspondientes a las variables inicializadas » Llama al “main” 176 SISTEMAS EMPOTRADOS CodeWarrior Fichero de parámetros para el linker. Describe la memoria física (READ_ONLY, READ_WRITE) descompuesta en segmentos SECTIONS Asigna secciones lógicas (.text, .data, …) a los segmentos de memoria física PLACEMENT Inicializa el vector de RESET y puede inicializar los vectores de interrupción VECTOR Inicialización de la pila STACKSIZE NAMES END SECTIONS RAM ROM END = READ_WRITE 0x0040 TO 0x023F; = READ_ONLY 0x8000 TO 0xFDFF; PLACEMENT .text .data END INTO INTO ROM; RAM; STACKSIZE 0x50 VECTOR 0 _Startup 177 SISTEMAS EMPOTRADOS CodeWarrior Fichero de parámetros para el linker. Siempre es preciso especificar .data en el bloque PLACEMENT » Si el resto de secciones a situar en la RAM no son especificadas Siempre es preciso especificar .text en el bloque PLACEMENT » Si el resto de secciones a situar en ROM no son especificadas Algunos sinónimos .data + .bss DEFAULT_RAM .text DEFAULT_ROM .init _PRESTART .rodata ROM_VAR .startData STARTUP .copy COPY 178 SISTEMAS EMPOTRADOS CodeWarrior Fichero de descripción del enlazado *.map PROGRAM "F:\...\bin\GP32_ASM_C_MIX_Mon08_FLASH.abs" ********************************************************************************************* TARGET SECTION --------------------------------------------------------------------------------------------Processor : Motorola HC08 Memory Model: SMALL File Format : ELF\Dwarf 2.0 Linker : SmartLinker V-5.0.19, Apr 2 2002 ********************************************************************************************* FILE SECTION --------------------------------------------------------------------------------------------TERMIO.C.o (ansi.lib) Model: SMALL, Lang: ANSI-C … clock.c.o Model: SMALL, Lang: ANSI-C ********************************************************************************************* STARTUP SECTION --------------------------------------------------------------------------------------------Entry point : 0x808C (_Startup) _startupData is allocated at 0x80A6 and uses 9 Bytes extern struct _tagStartup { unsigned flags 0 … } _startupData; 179 SISTEMAS EMPOTRADOS CodeWarrior Fichero de descripción del enlazado *.map ********************************************************************************************* SECTION-ALLOCATION SECTION Section Name Size Type From To Segment --------------------------------------------------------------------------------------------.text 6984 R 0x80B7 0x9BFE ROM .rodata 308 R 0x9BFF 0x9D32 ROM .rodata1 13 R 0x9D33 0x9D3F ROM .abs_section_0 1 N/I 0x0 0x0 .absSeg0 … .abs_section_ffdc 2 R 0xFFDC 0xFFDD .absSeg74 .bss 2 R/W 0x100 0x101 RAM … .copy 2 R 0x9D40 0x9D41 ROM .vectSeg75_vect 2 R 0xFFFE 0xFFFF .vectSeg75 ROM size: RAM size: 1D46 (dec: A2 (dec: 7494) 162) ********************************************************************************************* VECTOR-ALLOCATION SECTION Address InitValue InitFunction --------------------------------------------------------------------------------------------0xFFFE 0x808C _Startup ********************************************************************************************* OBJECT-ALLOCATION SECTION Name Module Addr hSize dSize Ref Section RLIB --------------------------------------------------------------------------------------------- 180 SISTEMAS EMPOTRADOS CodeWarrior Debugger Gestiona la comunicación con el target mediante el MON08 Permite la carga de programas en el » Flash o RAM Introducción de breakpoints » Gestión del módulo BRK del HC08 Visualización de memoria » Programa » Datos » Vectores de interrupción » Registros Código fuente Ejecución » Paso a paso, ejecución indefinida, ejecución hasta una determinada posición 181 SISTEMAS EMPOTRADOS M68ICS08GP In-Circuit Simulator El hardware del M68ICS08GP consta de dos componentes : ICS08GP20 board SPGMR08 serial programmer base unit La tarjeta ICS08GP20 El núcleo es un microcontrolador 68HC908GP32 » En la propia placa » En el target Tiene conexiones con » target » SPGMR08 182 SISTEMAS EMPOTRADOS M68ICS08GP In-Circuit Simulator Puede tener tres funciones » Emulador – La tarjeta contiene el microcontrolador alimentado – Reloj – Ofrece todos los pines del microcontrolador para conectarlos al target – PTA0 no se puede usar » Microcontrolador en modo monitor » Comunicación con un target con microcontrolador – Ofrece una interfase con el MON08 del target – Tarjeta sin microcontrolador – Posibilidades » In-line programming » Puesta a punto en el target » Grabación de microcontroladores 183 SISTEMAS EMPOTRADOS M68ICS08GP In-Circuit Simulator SPGMR08 serial programmer base unit Comunica el microcontrolador con el computador de desarrollo » Transforma la línea serie del modo monitor del 68HC08 en una RS232 Genera para la ICS08GP20 » Reloj de 4.9152-MHz » Alimentación 5 V » VTST de 8.5 V requerido para entrar en modo monitor Esta misma unidad vale para todos los HC08 184 SISTEMAS EMPOTRADOS M68ICS08GP In-Circuit Simulator Limitaciones en su uso como emulador El microcontrolador trabaja en modo monitor PTA0 condenada para las comunicaciones con el computador de desarrollo Las patillas PTA7, PTC0, PTC1, y PTC3 se desconectan del target durante un cierto tiempo en el reset Reloj externo 4.9152 MHz Frecuencia de bus de 2.4575 MHz (CGMXCLK/2) 185 SISTEMAS EMPOTRADOS Code Composer Fichero de cabecera El entorno de desarrollo no ofrece un fichero de cabecera predefinido El usuario debe programar uno /****************************************************************************** * FILENAME: F28XX.H * * Control registers of the F28xx device. ******************************************************************************/ … #define PIECTRL *((volatile unsigned int *)0xce0) /* PIE Control reg */ #define PIEACK *((volatile unsigned int *)0xce1) /* PIE Acknowledge reg */ #define PIEIER1 *((volatile unsigned int *)0xce2) /* PIE Int Enable 1 reg */ #define TIMER0TCR #define TIMER0TPR #define TIMER0PRD *((volatile unsigned int *)0xc04) /* TIMER0 control register */ *((volatile unsigned int *)0xc06) /* TIMER0 preescaler reg. */ *((volatile unsigned int *)0xc02) /* TIMER0 period register */ … #define WDCR #define DISABLE_WD … *((volatile unsigned int *)0x7029) /* WD Control reg */ 0x0068 186 SISTEMAS EMPOTRADOS Code Composer Programación de interrupciones “interrupt” indica al compilador que la función es una rutina de interrupción » Sin parámetros y no devuelve nada » RTI al final interrupt void Tick (void) { tick_counter ++ ; if (Active_Timer) if (Timer == tick_counter){ TO = 1 ; Active_Timer = 0 ; } PIEACK = 0x01; /* Acknowledge PIE group 1 int */ return ; } 187 SISTEMAS EMPOTRADOS Code Composer Definición de los vectores de interrupción /****************************************************************************** * FILENAME: Int_Vectors.C * Definicion de la tabla de interrupciones en el PIE * JL Villarroel (1-Octubre-2003) ******************************************************************************/ #pragma DATA_SECTION(vec, ".vectors"); extern void Tick (void) ; void UnusedIsr(void) ; typedef void (*VECTORS)(); /* Defines a type VECTORS which is a pointer to a */ /* function that returns void; takes no arguments */ const VECTORS vec[] = { UnusedIsr, UnusedIsr, UnusedIsr, UnusedIsr, UnusedIsr, UnusedIsr, UnusedIsr, … /* Interrupt vector table (doesn't include RESET) */ /* /* /* /* /* /* /* INT1 INT2 INT3 INT4 INT5 INT6 INT7 - Maskable Maskable Maskable Maskable Maskable Maskable Maskable int int int int int int int 1 2 3 4 5 6 7 */ */ */ */ */ */ */ 188 SISTEMAS EMPOTRADOS Code Composer Definición de los vectores de interrupción UnusedIsr, UnusedIsr, UnusedIsr, UnusedIsr, UnusedIsr, UnusedIsr, UnusedIsr, UnusedIsr, … UnusedIsr, UnusedIsr, UnusedIsr, UnusedIsr, UnusedIsr, UnusedIsr, UnusedIsr, Tick, UnusedIsr, … /* /* /* /* /* /* /* /* INT13 INT14 DLOGINTRTOSINTReserved NMI ILLEGALUSER1 - /* /* /* /* /* /* /* /* /* USER12 - User-defined sw int/trap PIE int 1.1 */ PIE int 1.2 */ PIE int 1.3 */ PIE int 1.4 */ PIE int 1.5 */ PIE int 1.6 */ PIE int 1.7, TINT0 (Timer 0) */ PIE int 1.8 */ }; interrupt void UnusedIsr(void) { return; } Maskable Maskable Maskable Maskable int 13, timer 1 int 14, timer 2 data-logging int real-time OS int Nonmaskable interrupt Illegal instruction trap User-defined sw int/trap */ */ */ */ */ */ */ */ */ 189 SISTEMAS EMPOTRADOS Code Composer El compilador permite intercalar instrucciones en ensamblador en ficheros fuente en C asm (”assembler text”) ; void Reset_Clock (void) { asm(" setc INTM ; Mask global interrupts"); asm(" eallow ; Enable accesses to PIE control registers"); /* Stop TIMER0 */ TIMER0TCR = 0x0010 ; … 190 SISTEMAS EMPOTRADOS Code Composer Secciones generadas por el compilador C 191 SISTEMAS EMPOTRADOS Code Composer Pragmas directivas al compilador #pragma CODE_SECTION (func, ”section name”) char bufferA[80]; char bufferB[80]; #pragma CODE_SECTION(funcA, ”codeA”) char funcA(int i); char funcB(int i); void main() { char c; c = funcA(1); c = funcB(2); } char funcA (int i) { return bufferA[i]; } … 192 SISTEMAS EMPOTRADOS Code Composer #pragma DATA_SECTION (symbol, “section name”) #pragma DATA_SECTION(bufferB, ”my_sect”) char bufferA[512]; char bufferB[512]; #pragma INTERRUPT (func) 193 SISTEMAS EMPOTRADOS Code Composer Inicialización Función predefinida del entorno _c_int00 » Se encuentra en la librería rts2800(_ml).lib » Inicializa el puntero de pila » Escribe ceros en las posiciones de las variables no inicializadas (.bss) » Copia los valores correspondientes a las variables inicializadas » Llama al “main” 194 SISTEMAS EMPOTRADOS Code Composer Fichero de parámetros para el linker *.cmd Describe la memoria física descompuesta en segmentos » R Read only ; RW Read and Write Cada página es un espacio de direcciones diferente » PAGE0 Programa » PAGE1 Datos » Diferentes vistas de una misma memoria física » Pueden solaparse MEMORY { PAGE 0 : BOOT(R) PAGE 0 : PROG(R) PAGE 0 : RESET(R) PAGE PAGE PAGE PAGE } … 1 1 1 1 : : : : M0RAM(RW) M1RAM(RW) PIEVT(RW) L0L1RAM(RW) : origin = 0x3f8000, length = 0x80 : origin = 0x3f8080, length = 0x1f80 : origin = 0x000000, length = 0x2 : : : : origin origin origin origin = = = = 0x000000, 0x000400, 0x000d02, 0x008000, length length length length = = = = 0x400 0x400 0xfe 0x2000 195 SISTEMAS EMPOTRADOS Code Composer Asigna secciones lógicas (.text, .bss, .stack, …) a los segmentos de memoria física SECTIONS … SECTIONS { /* 22-bit program sections .reset : > RESET, PAGE .cinit : > PROG, PAGE .text : > PROG, PAGE */ = 0 = 0 = 0 /* 16-Bit data sections */ .const : > M0RAM, PAGE = .bss : > M1RAM, PAGE = .stack : > M1RAM, PAGE = .sysmem : > M0RAM, PAGE = 1 1 1 1 /* 32-bit data sections */ .vectors : > PIEVT, PAGE .ebss : > L0L1RAM, PAGE .econst : > L0L1RAM, PAGE .esysmem : > L0L1RAM, PAGE = = = = 1 1 1 1 .boot > BOOT { -lrts2800_ml.lib<boot.obj> (.text) } } 196 SISTEMAS EMPOTRADOS Code Composer Fichero de descripción del enlazado *.map ****************************************************************************** TMS320C2000 COFF Linker PC Version 3.03 ****************************************************************************** >> Linked Wed Oct 01 13:16:27 2003 OUTPUT FILE NAME: <./Debug/Reloj.out> ENTRY POINT SYMBOL: "_c_int00" address: 003f8000 MEMORY CONFIGURATION PAGE PAGE name ---------------------0: RESET BOOT PROG origin -------00000000 003f8000 003f8080 length --------00000002 00000080 00001f80 used -------00000002 00000046 000016e1 attr ---R R R 1: M0RAM M1RAM PIEVT L0L1RAM 00000000 00000400 00000d02 00008000 00000400 00000400 000000fe 00002000 00000154 00000400 0000004e 00000da1 RW RW RW RW fill -------- 197 SISTEMAS EMPOTRADOS Code Composer Fichero de descripción del enlazado *.map SECTION ALLOCATION MAP output section -------.reset .boot .cinit .text page ---0 0 0 0 attributes/ input sections ---------------- origin ---------00000000 00000000 length ---------00000002 00000002 003f8000 003f8000 00000046 00000046 rts2800_ml.lib : boot.obj (.text) 003f8080 003f8080 003f808e 003f8098 003f818f 003f81b7 003f81bb 0000013c 0000000e 0000000a 000000f7 00000028 00000004 00000001 rts2800_ml.lib : : : : : --HOLE-- [fill = 003f81bc 003f81bc 003f8207 003f8210 … 000015a5 0000004b 00000009 0000005f rts2800_ml.lib : exit.obj (.text) : _lock.obj (.text) CLOCK.obj (.text) rts2800_ml.lib : boot.obj (.reset) exit.obj (.cinit) _lock.obj (.cinit) defs.obj (.cinit) lowlev.obj (.cinit) memory.obj (.cinit) 0] 198 SISTEMAS EMPOTRADOS Code Composer Fichero de descripción del enlazado *.map GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name address -------00000400 00000000 003f81bc 003f81e2 003f931b 003f8c7e 003f8b32 003f8b5b 003f8be5 003f8c67 003f8c70 003f8d17 003f8d38 003f8ee2 003f8f2f 003f8f3e 003f8f59 003f8f4c 003f8f53 … name ---.bss .data .text C$$EXIT C$$IO$$ FD$$ADD FD$$CMP FD$$DIV FD$$MPY FD$$NEG FD$$SUB FD$$TOI FD$$TOL FS$$TOFD L$$DIV L$$MOD L$$TOFD UL$$DIV UL$$MOD 199 SISTEMAS EMPOTRADOS Code Composer Debugger Gestiona la comunicación con el target mediante la interfase JTAG Permite la carga de programas en el DSP » Flash o RAM Introducción de breakpoints » Gestión de las dos unidades de análisis AU1 y AU2 breakpoints hardware » Introducción de breakpoints software (si programa en RAM) Visualización de memoria » Programa » Datos . Puede ser gráfica (visualización de señales) » Vectores de interrupción » Registros Código fuente Ejecución » Paso a paso, ejecución indefinida, ejecución hasta una determinada posición 200 SISTEMAS EMPOTRADOS eZdsp F2812 Es una tarjeta autónoma con un TMS320F2812 Características básicas Reloj de 30 MHz 64K de memoria SRAM externa Conexiones con el computador de desarrollo » Conector JTAG » Conector paralelo (puerto impresora)-JTAG Conectores a un target » Expansión de memoria » Entradas/salidas digitales/periféricos » Entradas analógicas conversor AD Diversas posibilidades de configuración mediante jumpers 201 SISTEMAS EMPOTRADOS eZdsp F2812 Diagrama de bloques 202 SISTEMAS EMPOTRADOS SISTEMAS EMPOTRADOS GESTIÓN DE TIEMPO 203 SISTEMAS EMPOTRADOS TIEMPO Las necesidades con respecto al tiempo de un sistema empotrado son fundamentalmente: Medida del tiempo » Tiempo absoluto » Intervalos temporales Activación con respecto al tiempo » Actividades periódicas » Actividades esporádicas 204 SISTEMAS EMPOTRADOS TIEMPO El tiempo es una magnitud física fundamental, cuya unidad en el SI es el segundo. Se necesitan dos tipos de medidas: » Tiempo absoluto » Tiempo relativo o intervalos de tiempo El tiempo absoluto necesita un sistema de referencia » escala de tiempo » con un origen que se denomina época Un sistema de tiempo real para medir el paso del tiempo puede: » Acceder a un sistema de referencia externo (p.e. Señal UTC del GPS) » Utilizar un reloj de hardware interno que proporciona una aproximación del paso del tiempo en el entorno 205 SISTEMAS EMPOTRADOS TIEMPO Sistemas de referencia estándar Astronómicos » Tiempo universal (UT0):Tiempo solar en el meridiano Greenwich » UT1, UT2: correcciones por el desplazamiento polar y por variaciones de la velocidad de rotación de la Tierra Atómicos » Tiempo Atómico Internacional (IAT): Basado en un reloj atómico de cesio » Tiempo Universal Coordinado (UTC): Reloj IAT sincronizado con UT2 mediante la adición de ticks ocasionales 206 SISTEMAS EMPOTRADOS MEDIDA DEL TIEMPO El tiempo en un computador se mide con: Relojes » Medida de tiempo absoluto » Funcionan de forma continua Temporizadores » Medida de intervalos temporales » Arranque y paro Arranque [ t1 ∆t Paro Temporizador ] t2 t Reloj ∆t = t2-t1 207 SISTEMAS EMPOTRADOS MEDIDA DEL TIEMPO Reloj: es un módulo (de hardware y software) que proporciona el valor del tiempo real cuando se lee. Un reloj está compuesto por: Una electrónica que genera eventos periódicos » Oscilador onda cuadrada (eventos = flancos de subida) Un contador que acumula los eventos Un software que convierte el valor del contador en unidades de tiempo (segundos, minutos, ...). Las características más importantes de un reloj son: Precisión (granularidad). Depende de la frecuencia del oscilador y de la forma de contar los impulsos. Intervalo de valores. Depende de la precisión y de la capacidad del contador. 208 SISTEMAS EMPOTRADOS MEDIDA DEL TIEMPO Unidad de tiempo: tick El contador es de capacidad limitada » desbordamiento -> reinicio cuenta Tiempo computador tick vida aplicación (t. no monótono) tiempo tiempo monótono, la aplicación tiene una vida menor que el tiempo de desbordamiento. tiempo no monótono, la aplicación vive más que el tiempo de desbordamiento 209 SISTEMAS EMPOTRADOS MEDIDA DEL TIEMPO La monotonía del tiempo depende de: el tiempo de vida de la aplicación el tamaño del contador en relación con el tamaño del tick. Problemas del tiempo no monótono No se dispone del tiempo absoluto » No se puede mantener fecha, hora, ... No se pueden utilizar intervalos temporales por encima del tiempo de desbordamiento del contador del reloj 210 SISTEMAS EMPOTRADOS Realización de un reloj (68HC08) Para hacer un reloj necesitamos: Una base de tiempos, el TICK » Eventos periódicos que se cuentan: pulsos, interrupciones. Un contador de ticks Posibilidades en el 68HC08 Señal de reloj del BUS (2.4575 MHz) + contador de un timer TxCNT divisor resolución µs desbordamineto ms PS2-PS0 1 0,407 26,7 000 2 0,814 53,3 001 4 1,628 106,7 010 8 3,255 213,3 011 » Mucha precisión, poco rango temporal 16 32 64 6,510 13,021 26,042 426,7 853,3 1706,7 100 101 110 Interrupción periódica TBM (CGMXCLK = 4.9152 MHz) + contador software duración tick µs TBR2-TBR0 1,6 111 3,3 110 6,5 101 13,0 100 26,0 011 416,7 1666,7 6666,7 010 001 000 » Tiempo de desbordamiento: depende del tamaño del contador » Menor precisión, rango temporal ajustable 211 SISTEMAS EMPOTRADOS Realización de un reloj (68HC08) Estructura del TBM 212 SISTEMAS EMPOTRADOS Realización de un reloj (68HC08) Realización de un reloj basado en el TBM Interrupción diseñada expresamente para este propósito Parametrización de interrupción de reloj, TBI (Time Base Interrupt) » Elección de la frecuencia Activación de la interrupción Programación de la rutina de interrupción » Sumar uno al contador de ticks Programación de las funciones de manejo y lectura del reloj 213 SISTEMAS EMPOTRADOS Realización de un reloj (68HC08) Parametrización del TBM y activación Registro TBCR » TBR2-TBR0 » TBIE » TBON ajuste TICK (tabla) habilitación interrupción activación del TBM duración tick µs, CGMXCLK = 4.9 MHz TBR2-TBR0 1,6 111 3,3 110 6,5 101 13,0 100 26,0 011 416,7 1666,7 6666,7 010 001 000 /* Tick de 1.66ms, 600Hz Se supone seleccionado el reloj externo, no el PLL (BCS = 0) CGMXCLK = 4.9152 MHz. Divisor de 8192 */ TBR2=0; TBR1=0; TBR0=1; /* Activacion de las interrupciones y del TBM */ TBON=1; TBIE=1; asm cli ; 214 SISTEMAS EMPOTRADOS Realización de un reloj (68HC08) Contador de ticks TBI a 1.66 ms Variable global Rango/monotonía: depende del tamaño » 2 bytes (TBI a 1.66 ms) => 109 segundos » 4 bytes (TBI a 1.66 ms) => 82 días El incremento de una variable de 2 bytes más rápido que 4 bytes Por ejemplo: static unsigned int tick_counter ; /* 2 bytes desbordamiento en 109 segundos si TBI 1.66 ms */ 215 SISTEMAS EMPOTRADOS Realización de un reloj (68HC08) Rutina de interrupción Rearme de la interrupción Incremento del contador interrupt 17 vector de interrupción del TBM void interrupt 17 Tick (void) { TACK = 1 ; tick_counter ++ ; } 216 SISTEMAS EMPOTRADOS Realización de un reloj (68HC08) Funciones de manejo y lectura /* clock.h */ #ifndef clock_h #define clock_h extern void Reset_Clock (void) ; /* inicializacion y puesta a cero del contador */ extern void Start_Clock (void) ; /* Puesta en marcha del reloj */ /* arranque de la interrupcion periodica del TBM */ extern void Stop_Clock (void) ; /* Parada del reloj */ /* deshabilitacion de la interrupcion */ extern unsigned int Get_Time (void) ; /* devuelve el valor del contador (tiempo) */ #endif SISTEMAS EMPOTRADOS Realización de un reloj (TMS320F2812) Estructura de uno de los TIMERs (TMER 0) 217 218 SISTEMAS EMPOTRADOS Realización de un reloj (TMS320F2812) Utilización del Timer0 interrupt void Tick (void) { SYSCLKOUT = 15 MHz tick_counter ++ ; PIEACK = 0x01; /* Acknowledge PIE group 1 int */ return ; void Reset_Clock (void) { } asm(" setc INTM asm(" eallow TIMER0TCR = 0x0010 ; ; Mask global interrupts"); ; Enable accesses to PIE control registers"); /* Detener en TIMER0 */ TIMER0TPR = 14 ; /* /* /* /* /* TIMER0PRD = 9999 ; PIEIER1 = 0x40; PIECTRL |= 1; tick_counter = 0 ; TIMER0TCR = 0xC020 ; IER = 0x01 ; asm(" clrc INTM asm(" edis return; } 14 + 1 ticks de SYSCLKOUT */ Cada tick del TIMER0 = 1 microsegundo */ Periodo = 10000 ticks = 10 ms */ Enable PIE int 1.7 */ Habilitacion global del PIE */ /* TIF = 1 borrado inicial del flag */ /* TIE = 1 habilitación de la interrupción */ /* TRB = 1 recarga del timer */ /* TSS = 0 TIMER0 en marcha */ /* Habilitacion de la INT1 */ ; Enable global interrupts"); ; Disable accesses to PIE control registers"); 219 SISTEMAS EMPOTRADOS MEDIDA DE INTERVALOS Medida basada en un reloj En el 68HC08 o en el TMS320F2812 t1 = Get_Time () ; /* instante de inicio */ /* espera hasta que se cumpla la condicion de fin */ ... t2 = Get_Time () ; /* instante de fin */ duracion_intervalo = t2 - t1 ; Lectura tiempo [ t1 ∆t Lectura tiempo ] t2 ∆t = t2 - t1 t 220 SISTEMAS EMPOTRADOS MEDIDA DE INTERVALOS Características de funcionamiento » Funciona con reloj no monótono » Periodos menores que el tiempo de desbordamiento Ejemplo » Espera pasando por desbordamiento cuenta final cuenta inicial intervalo t2 = t1 = - t1 = t2 = $00EF t1 = $FFF0 ∆t = t2 - t1 = $00FF 0000 0000 1110 1111 1111 1111 1111 0000 0000 0000 0001 0000 t2 + (-t1) = 0000 0000 1111 1111 221 SISTEMAS EMPOTRADOS MEDIDA DE INTERVALOS Medida basada en un temporizador (timer) En el 68HC08: utilización de los IC de los TIM Ejemplo: Medida de la anchura de un pulso (TIM1, CHANNEL 0) void Inicia_Mide_Pulso (void) { fin_medida = 0 ; flanco_subida = 1 ; T1SC0 &= 0x00 ; /* Borrado del registro, CH0F = 0 */ ELS0A_1 = 1 ; /* Sensible a la subida */ CH0IE_1 = 1 ; /* Activar interrupcion */ } void interrupt 4 Pulso (void) { if flanco_subida { instante_subida = T1CH0 ; flanco_subida = 0 ; T1SC0 &= 0x00 ; /* Borrado del registro, CH0F = 0 */ ELS0B_1 = 1 ; /* Sensible a la bajada */ CH0IE_1 = 1 ; /* Activar interrupcion */ } else { instante_bajada = T1CH0 ; T1SC0 &= 0x00 ; /* Borrado del registro, CH0F = 0 */ /* IC desactivado */ /* Interrupcion desactivada */ duracion = instante_bajada - instante_subida ; fin_medida = 1 ; } } void Main (void) { ... Inicia_Mide_Pulso () ; while !(fin_medida) ; ... /* uso de la medida */ } 222 SISTEMAS EMPOTRADOS ACTIVACIÓN DE ACCIONES PERIÓDICAS Ejemplo bucle de control while(1){ leer_entradas(); calcular_salidas(); emitir_salidas(); ????? } ¿cómo conseguir que el bucle se ejecute periódicamente con un periodo prefijado? Pb: El código ejecutado varía de una iteración a otra: interrupciones E/S composición condicional Dos posibilidades Retrasos Interrupción periódica T 223 SISTEMAS EMPOTRADOS ACTIVACIÓN PERIÓDICA: ESPERAS Programación de un bucle periódico con un retraso: void Periodica (void) { unsigned int periodo = 25 ; /* periodo expresado en ticks */ unsigned int siguiente ; Reset_Clock () ; Start_Clock () ; siguiente = Get_Time () ; while(1) { Actividad_Periodica () ; siguiente += periodo ; delay_until(siguiente) ; } } Retraso basado en el reloj del sistema 68HC08: delay_until basado en el TBM » Duración del periodo = número entero de ticks – Si tick = 1.66 ms ticks) Periodo 10 ms 9.66 ms (6 ticks) ó 11.62 ms (7 TMS320F2812: delay_until basado en el TIMER0 » Mayor flexibilidad en la elección del tick 224 SISTEMAS EMPOTRADOS ACTIVACIÓN PERIÓDICA: ESPERAS Función de espera en el módulo de reloj Reloj no monótono => » Esperas menores que el tiempo de desbordamiento » La condición de espera es: (T != tick_counter) » La condición se debe verificar siempre que la cuenta del reloj cambie void delay_until (unsigned int T) { while (T != tick_counter) asm WAIT ; } /*68HC08*/ Reloj monótono => » La condición de espera es: void delay_until (unsigned int T) { while (T != tick_counter) asm ("IDLE") ; (T} >/*TMS320F2812*/ tick_counter) » La condición no es preciso verificarla en cada tick 225 SISTEMAS EMPOTRADOS ACTIVACIÓN PERIÓDICA: ESPERAS 68HC08 TMS320F2812 Se detiene la CPU para disminuir el consumo: WAIT Se detiene la CPU para disminuir el consumo: IDLE » WAIT = espera a la llegada de una interrupción » IDLE = espera a la llegada de una interrupción Desenmascara las interrupciones » Cuando llega una interrupción se activa la CPU – » Cuando llega una interrupción se activa la CPU – Se pasa a ejecutar la rutina de interrupción » Al acabar la rutina de interrupción continúa la ejecución de la aplicación tick WAIT – – INTM=0 Se pasa a ejecutar la rutina de interrupción INTM=1 Se ejecuta el programa en la siguiente instrucción del IDLE 226 SISTEMAS EMPOTRADOS ACTIVACIÓN PERIÓDICA: ESPERAS Problemas con el tiempo no monótono ¿Por qué no se hace una comparación de >? Ejemplo: Contador de 1 byte » siguiente += periodo => siguiente = 1 » La condición de espera es: (siguiente > tick_counter) 253 254 255 0 1 2 siguiente Tick_counter = 253 > siguiente = 1 la aplicación se activa inmediatamente 3 t 227 SISTEMAS EMPOTRADOS ACTIVACIÓN PERIÓDICA: ESPERAS Problemas con el tiempo no monótono: comparación de igualdad Ejemplo: Contador de 1 byte siguiente += periodo => siguiente = 252 Dos casos » Funcionamiento normal » La actividad periódica no ha concluido antes de la siguiente activación 248 249 250 251 252 253 siguiente 254 t Tick_counter = 253 > siguiente tick_counter = 252 dentro de 254 ticks 228 SISTEMAS EMPOTRADOS ACTIVACIÓN PERIÓDICA: INTERRUPCIONES Activación basada en los OCs HC08 y frecuencia de bus = 2.4575 MHz periodo = 2s => ¡¡IMPOSIBLE!! periodo = 10 ms » tick del timer = 407 ns » periodo < 26.7 ms » 10 ms » El periodo no puede ser mayor que 1706.7 ms (tiempo máximo de desbordamiento del timer pral.) #include “timer_OCs.h” void Periodica (void) { unsigned int periodo = 24570 ; Init_OC(periodo) ; while(1) { actividad () ; comienzo = 0 ; while (comienzo == 0) ; /* espera interrupcion */ } } OK 24.570 ticks (9.9999 ms) 229 SISTEMAS EMPOTRADOS ACTIVACIÓN PERIÓDICA: INTERRUPCIONES La rutina de interrupción #include “timer_OCs.h” /* timer_OCs.h */ volatile unsigned char comienzo ; static unsigned int Periodo ; void Init_OC(unsigned int N_Ticks) ; void Init_OC(unsigned int N_Ticks) { Periodo = N_Ticks ; MS0B_1 = 0 ; MS0A_1 = 1 ; TSTOP_1 = 0 ; /* Arranca el TIM1 */ T1CH0 = T1CNT + Periodo ; comienzo = 0 ; CH0IE_1 = 1 ; /* Habilitacion de la interrupcion */ } void interrupt 4 OutputCompare_Handler (void) { T1CH0 += Periodo ; aux = T1SC0 ; /* Lectura T1SC0 */ CH0F_1 = 0 ; /* Borrar el flag CH0F */ comienzo = 1 ; } SISTEMAS EMPOTRADOS ACTIVACIÓN PERIÓDICA: INTERRUPCIONES Posibilidad de detectar desbordamientos de periodo void interrupt 4 OutputCompare_Handler (void) { T1CH0 += Periodo ; aux = T1SC0 ; CH0F_1 = 0 ; /* Borrar el flag CH0F */ if (comienzo) desbordamiento_de_periodo() ; else comienzo = 1 ; } 230 231 SISTEMAS EMPOTRADOS ACTIVACIÓN ESPORÁDICA Generación de un evento esporádico basado en: Un temporizador basado en un reloj Un temporizador dedicado Activación del temporizador Expiración del temporizador ∆t Instante actual Instante de activación t 232 SISTEMAS EMPOTRADOS ACTIVACIÓN ESPORÁDICA Mediante un temporizador basado en un reloj El delay_until no puede utilizarse porque se detiene la aplicación Programación de un temporizador » Permite la ejecución de código mientras se espera » La gestión se realiza dentro de la rutina de interrupción del reloj – La aplicación no se preocupa del temporizador » Comunicación con la aplicación mediante un banderín – Expiración del temporizador 233 SISTEMAS EMPOTRADOS ACTIVACIÓN ESPORÁDICA Gestión mediante tres variables » Timer: instante temporal en que debe expirar el temporizador » Active_timer: banderín que indica si se ha activado el temporizador » TO: banderín que indica si ha expirado el timer static char Active_Timer ; static unsigned int Timer ; static char TO ; 234 SISTEMAS EMPOTRADOS ACTIVACIÓN ESPORÁDICA La nueva rutina de interrupción #pragma interrupt_handler Tick void Tick (void) { TACK = 1 ; tick_counter ++ ; if (Active_Timer) /* gestion del temporizador */ if (Timer == tick_counter){ TO = 1 ; Active_Timer = 0 ; } } 235 SISTEMAS EMPOTRADOS ACTIVACIÓN ESPORÁDICA Manejo del temporizador desde la aplicación » Programación de la espera no bloqueante void Set_Timer (unsigned int Ticks) { Timer = tick_counter + Ticks ; TO = 0 ; Active_Timer = 1 ; } » Consulta del banderín char Time_Out (void) { return TO ; } » Eliminación de la espera void Remove_Timer (void) { Active_Timer = 0 ; TO = 0 ; } 236 SISTEMAS EMPOTRADOS ACTIVACIÓN ESPORÁDICA Mediante un temporizador dedicado Utilización de los OCs Ejemplo: Realización de un PWM » Se verá en prácticas 237 SISTEMAS EMPOTRADOS SISTEMAS EMPOTRADOS SISTEMAS DISCRETOS SECUENCIALES 238 SISTEMAS EMPOTRADOS INTRODUCCIÓN Sistema discreto secuencial: sistema dinámico cuyo estado sólo puede adquirir un conjunto discreto de valores CONTINUO DISCRETO CONTINUO Sistemas Continuos o Analógicos Sistemas Discretos Secuenciales Asíncronos DISCRETO TIEMPO ESTADO Sistemas de Tiempo Discreto o Muestreados Sistemas Discretos Secuenciales Síncronos 239 SISTEMAS EMPOTRADOS INTRODUCCIÓN Tiempo continuo (sistemas asíncronos) El estado del sistema puede cambiar en cualquier instante en función de las entradas. Tiempo discreto (sistemas síncronos) El estado del sistema sólo cambia ante la llegada de un evento de sincronización » Señal de reloj cada T segundos se leen las entradas y se evoluciona en función de éstas y del estado. » Evento de sincronización validación, interrupción periférico, ... Evento discreto: ocurrencia de una característica en la evolución de una señal (flanco de subida, paso por un cierto nivel, pulso, llegada de un dato, …). Herramientas formales: Autómatas de estados finitos Redes de Petri Eventos discretos 240 SISTEMAS EMPOTRADOS CONCEPTO DE AUTÓMATA. MODELOS Modelo de MEALY Máquina de MEALY: Una máquina secuencial de tipo MEALY es una 5-tupla M=(Q,I,O,δ,β) donde: Q ≠ Ø es un conjunto finito de estados I ≠ Ø es un conjunto finito de entradas (simbolos de …) O ≠ Ø es un conjunto finito de salidas (simbolos de …) δ: QxI → Q es la función de transición de estado β: QxI → O es la función de salida I δ β Q O 241 SISTEMAS EMPOTRADOS CONCEPTO DE AUTÓMATA. MODELOS Modelo MOORE Máquina de MOORE: Una máquina secuencial de tipo MOORE es una 5-tupla M=(Q,I,O,δ,λ) donde: Q ≠ Ø es un conjunto finito de estados I ≠ Ø es un conjunto finito de entradas (símbolos de …) O ≠ Ø es un conjunto finito de salidas (símbolos de …) δ: QxI → Q es la función de transición de estado λ: Q → O es la función de salida I δ Q λ O 242 SISTEMAS EMPOTRADOS CONCEPTO DE AUTÓMATA. MODELOS Ejemplo: Sumador binario serie de 1 bit Dos entradas binarias x1 y x2 … 0 1 1 1 1 Una salida binaria y x1 + Modelo MEALY Q = {q0,q1} donde » q0 → estado de no acarreo … 0 1 1 0 0 » q1 → estado de acarreo Función de transición de estado: » δ(q0,11) = q1 δ(q0,00/01/10) = q0 » δ(q1,00) = q0 δ(q1,10/01/11) = q1 Función de salida: » β(q0,00/11) = 0 β(q0,01/10) = 1 » β(q1,00/11) = 1 β(q1,01/10) = 0 x2 y … 1 1 0 1 1 243 SISTEMAS EMPOTRADOS CONCEPTO DE AUTÓMATA. MODELOS Modelo MOORE Q = {q00,q01,q10,q11} donde » q00 → estado de no acarreo con salida y=0 » q01 → estado de no acarreo con salida y=1 » q10 → estado de acarreo con salida y=0 » q11 → estado de acarreo con salida y=1 Función de transición de estado: » δ(q00/q01 ,00) = q00 δ(q00/q01 ,11) = q10 » δ(q10/q11 ,00) = q01 δ(q10/q11 ,11) = q11 » δ(q00/q01 ,01/10) = q01 δ(q10/q11,01/10) = q10 Función de salida: » λ(q00/q10) = 0 λ(q01/q11) = 1 244 SISTEMAS EMPOTRADOS AUTÓMATAS. REPRESENTACIÓN Y MODELADO Tabla de transición Representación tabular de las funciones de transición de estado y salida Ejemplo: Sumador binario serie de 1 bit » Modelo MEALY q0 q1 00 01 11 10 q0,0 q0,1 q1,0 q0,1 q0,1 q1,0 q1,1 q1,0 >> Modelo MOORE q00 q01 q10 q11 00 q00 q00 q01 q01 01 q01 q01 q10 q10 11 q10 q10 q11 q11 10 q01 q01 q10 q10 O 0 1 0 1 245 SISTEMAS EMPOTRADOS AUTÓMATAS. REPRESENTACIÓN Y MODELADO Diagrama de transición Grafo cuyos nodos representan estados y los arcos cambios de estado. Ejemplo: Sumador binario serie de 1 bit » Modelo MEALY 00/0 11/1 11/0 01,10/1 q0 q1 01,10/0 q10 /0 10,01 00/1 00 11 q00 /0 01,10 11 00 11 q01 /1 00 01,10 01,10 00 » Modelo MOORE q11/1 11 246 SISTEMAS EMPOTRADOS REDUCCIÓN DE AUTOMATAS Autómatas completamente especificados Una vez construido un modelo: » ¿Es posible reducir el número de estados? – ↓ coste de una realización – ↑ manejabilidad del modelo Estados equivalentes: Dado un autómata de estados finitos A=(Q,I,O,δ,λ), dos estados qi, qj ∈ Q se dicen equivalentes ⇔ δ(qi,e) = δ(qj,e) ∀e ∈ I y λ(qi) =λ(qj). (MEALY β(qi,e) = β(qj,e) ∀e ∈ I) Dos estados equivalentes son INDISTINGUIBLES El comportamiento del autómata a partir de cualquiera de los dos estados es el mismo. 247 SISTEMAS EMPOTRADOS REDUCCIÓN DE AUTÓMATAS Ejemplo: Reconocedor de cadenas 101 x ...111011011 I: x={0,1} ...001001000 0/0 O: y={0,1} donde » 0→ Rec.(101) y cadena no reconocida » 1 → cadena reconocida NADA 1/0 1/0 1 1/0 0/0 0/0 0/0 Estados: NADA nada reconocido 1 subcadena 1 reconocida 10 subcadena 10 reconocida 101 cadena 101 reconocida 10 1/1 101 248 SISTEMAS EMPOTRADOS REDUCCIÓN DE AUTÓMATAS 0 NADA 10 NADA NADA NADA 1 10 101 1 0 0 0 0 0 1 0 0 1 0 NADA 10 10 101 1 1 1 101 1 101 --> NADA EQ. NADA 10 NADA 1 10 249 SISTEMAS EMPOTRADOS REDUCCIÓN DE AUTÓMATAS NADA 1 10 0 NADA 10 NADA 0/0 NADA 1 1 1 NADA 0 0 0 0 1 0 0 1 1/0 1/0 1 0/0 1/1 0/0 10 250 SISTEMAS EMPOTRADOS REDUCCIÓN DE AUTÓMATAS Autómatas incompletamente especificados Ejemplo: Detector de coches en sentido contrario » Especificar un sistema que permita detectar vehículos que circulan en dirección contraria por una autovía. Dicho sistema tendrá dos entradas e1 y e2 que serán las señales de dos células fotoeléctricas situadas a una distancia menor que que la longitud del vehículo y la separación entre vehículos. e2 e1 q1 q2 q3 q4 q5 q6 q7 251 SISTEMAS EMPOTRADOS REDUCCIÓN DE AUTÓMATAS q1 q2 q3 q4 q5 q6 q7 00 q1 q1 q1 01 q5 q4 q4 q5 - 11 q3 q3 q6 q6 - 10 q2 q2 q7 q7 S 1 1 1 1 0 0 0 Estados compatibles: Dado un autómata de estados finitos A=(Q,I,O,δ,λ) incompletamente especificado, se dice que dos estados qi, qj ∈ Q son compatibles qi ~ qj ⇔ ∀e ∈ I tal que δ(qi,e) y δ(qj,e) están especificadas ⇒ δ(qi,e) = δ(qj,e) ó δ(qi,e) ~ δ(qj,e) (2) λ(qi) = λ(qj) si ambas están (1) especificadas 252 SISTEMAS EMPOTRADOS REDUCCIÓN DE AUTÓMATAS Relación de compatibilidad Reflexiva, simétrica NO transitiva Clase de compatibilidad Elementos que cumplen la propiedad transitiva Los estados de una clase de compatibilidad pueden llegar a ser equivalentes Reducción Búsqueda de clases de compatibilidad Especificación estados = problema de cobertura 253 SISTEMAS EMPOTRADOS REDUCCIÓN DE AUTÓMATAS Obtención de compatibles máximos Construcción de la tabla de parejas compatibles Algoritmo (1) Crear una lista de compatibles (L) con los pares de elementos compatibles definidos por la columna k (la que está más a la derecha con al menos un par compatible) (2) Para i:= k - 1 hasta i = 1 Si Ci ≠ ∅ entonces 2.1 Realizar la intersección entre Ci y los elementos de L 2.2 Añadir a L los compatibles formados por el resultado de las intersecciones no nulas más el elemento i, así como los pares de compatibles definidos por la columna i-ésima 2.3 Suprimir de L los conjuntos contenidos en otros (3) Añadir a L todos los elementos del conjunto de partida que no estén contenidos en ningún elemento de L 254 SISTEMAS EMPOTRADOS REDUCCIÓN DE AUTÓMATAS C1 C2 q1 x q2 x x q3 x q4 x q5 q6 q7 q2 q3 q4 q5 q6 q7 q1 6 5 4 3 2 1 q2 q3 q4 q5 C3 x x x q6 (q6 q7) (q6 q7) (q5 q6) (q5 q7) → (q5 q6 q7) (q5 q6 q7) (q5 q6 q7) (q3 q4) (q5 q6 q7) (q3 q4) (q2 q4) (q2 q3) → (q5 q6 q7) (q2 q3 q4) (q5 q6 q7) (q2 q3 q4) (q1 q2) 255 SISTEMAS EMPOTRADOS REDUCCIÓN DE AUTÓMATAS q1 → C1 (sistema en reposo) q2,q3,q4 → C2 (coche en sentido permitido) q5,q6,q7 → C3 (coche en sentido contrario) C1 C2 C3 00 C1 C1 C1 01 C3 C2 C3 01,11,10 C3/0 11 C2 C3 10 C2 C2 C3 00,11 00 01 C1/1 01,11,10 10 00 C2/1 S 1 1 0 256 SISTEMAS EMPOTRADOS AUTÓMATAS. IMPLEMENTACIÓN Entradas Eventos de sincronización el sistema » Reloj espera a su llegada para que evolucione Autómata implementado como actividad periódica » Sincronización Interrupción Entradas de nivel » Lectura asíncrona – Las entradas se leen conforme se vayan necesitando en el tratamiento – PB: aleatoriedades » Lectura síncrona – Se leen todas las entradas a la vez – Memoria Imagen 257 SISTEMAS EMPOTRADOS AUTÓMATAS. IMPLEMENTACIÓN Ejemplo aletoriedad 0 1 0 1 e1 e2 if (e1) { if (e2) {...} else {...}} else { if (e2) {...} else {...}} ¿¡01!? 258 SISTEMAS EMPOTRADOS AUTÓMATAS. IMPLEMENTACIÓN Salidas Impulsionales o acciones » Asociadas a cambios de estados / Modelo MEALY De nivel o mantenidas » Asociadas a estados / Modelo MOORE Generación » En el instante en que se calculan (asíncrona) » Todas al final del tratamiento (síncrona) er em qi/oj es em/clear(oj) er/set(oj) qi en es/set(oj) en/clear(oj) 259 SISTEMAS EMPOTRADOS AUTÓMATAS. IMPLEMENTACIÓN Ej.: Detector sentido contrario Moore Asíncrono 01,11,10 C3/0 00,11 00 01 C1/1 01,11,10 10 C2/1 00 void main (void) { C1: Genera (NO_ALARMA) ; Entrada = Leer_Entrada () ; if (Entrada == I01) goto C3 ; if (Entrada == I10) goto C2 ; goto C1 ; C2: Genera (NO_ALARMA) ; Entrada = Leer_Entrada () ; if (Entrada == I00) goto C1 ; goto C2 ; C3: Genera (ALARMA) ; Entrada = Leer_Entrada () ; if (Entrada == I00) goto C1 ; goto C3 ; return ; } Pb. código no estructurado => difícil de poner a punto y mantener CICLO DE TRATAMIENTO 260 SISTEMAS EMPOTRADOS AUTÓMATAS. IMPLEMENTACIÓN Ciclo de tratamiento Ej.: Detección sentido contrario » MOORE » Entradas nivel muestreadas (síncronas) » Salidas asíncronas void main (void) { while (TRUE) { Entrada = Leer_Entrada () ; switch (Estado) { case C1 : Genera (NO_ALARMA) ; switch (Entrada) { case I01 : Estado = C3 ; break case I10 : Estado = C2 ; break default : } break ; case C2 : Genera (NO_ALARMA) ; if (Entrada == I00) Estado = C3 break ; case C3 : Genera (ALARMA) ; if (Entrada == I00) Estado = C1 break ; } } return ; } ; ; ; ; 261 SISTEMAS EMPOTRADOS AUTÓMATAS. IMPLEMENTACIÓN Ej: reconocedor de cadenas: MEALY, Evento de sincronización, Salidas síncronas 0/0 1/0 void main (void) { 1/0 while (TRUE) NADA 1 { Espera_Sincronismo () ; 0/0 Entrada = Leer_Bit () ; 1/1 switch (Estado) { case NADA : if (Entrada==0) {Salida=0; Estado=NADA;} else if (Entrada==1) {Salida=0; Estado=E1;} break ; case E1 : if (Entrada==0) {Salida=0; Estado=E10;} else if (Entrada==1) {Salida=0; Estado=E1;} break ; case E10 : if (Entrada==0) {Salida=0; Estado=NADA;} else if (Entrada==1) {Salida=1; Estado=E101;} break ; case E101 : if (Entrada==0) {Salida=0; Estado=NADA;} else if (Entrada==1) {Salida=0; Estado=E1;} } Genera (Salida) ; } return ; } 0/0 10 262 SISTEMAS EMPOTRADOS AUTÓMATAS. IMPLEMENTACIÓN Reconocedor de cadenas con entrada de validación Implementación en el HC08 void Espera_Sincronismo (void) { char sinc = 0 ; while (!sinc) asm WAIT ; } IRQ Salida 0/1 PTC0 void interrupt 2 Manejador_IRQ (void) { sinc = 1 ; } char Leer_Bit (void) { return (char)PTC0 ; } 263 SISTEMAS EMPOTRADOS AUTÓMATAS. IMPLEMENTACIÓN Autómata síncrono periódico P.e. basado en el TBM void main (void) { Inicializacion () ; Reset_Clock () ; Start_Clock () ; Siguiente = Get_Time () ; while (TRUE) { /* Espera_Sincronismo */ Siguiente = Siguiente + T ; delay_until (Siguiente) ; Entrada = ... ; switch (Estado) { case ... : ... ... } Genera (Salida) ; } return ; } 264 SISTEMAS EMPOTRADOS AUTÓMATAS. IMPLEMENTACIÓN Time-out: TOi ESPERA ei TIME-OUT Implementación Set_Timer(Toi) ESPERA ei /Remove_Timer() Time_Out() 265 SISTEMAS EMPOTRADOS RdP. INTRODUCCIÓN Ejemplo: Carros que van y vienen sincronizados l1 r1 T1 A M r2 l2 Al pulsar M ambos carros se desplazan a la derecha. El regreso lo hacen simultáneamente cuando ambos carros se encuentren en el extremo derecho. T2 C A MAC Autómata: 2 B 3 4 D A l2 r1 , r2 D B 5 6 D 1 C r2 B l1 , l2 C l1 7 r1 266 SISTEMAS EMPOTRADOS RdP. INTRODUCCIÓN 1 Tres carros MACE r1 , r 2 , r 3 2 B r2 , r 3 3 D D 6 7 C 13 11 A E l3 r1 8 E l1 , l 3 E 14 A l1 , l 2 , l 3 C l2 , l 3 D B 9 10 r2 D A r1 , r 2 5 B F r3 F r1 , r 3 4 B F F l2 12 A l1 , l 2 C 15 l1 C E 267 SISTEMAS EMPOTRADOS RdP. INTRODUCCIÓN Para N carros → 2N+1 - 1 estados Problemas del modelado con autómatas de estados finitos de sistemas con evoluciones paralelas (sistemas concurrentes): conduce a descripciones complejas (gran número de estados) no permite modificaciones locales del comportamiento del sistema → poca flexibilidad (Ej.: uno de los carros vuelve sin sincronizarse) 268 SISTEMAS EMPOTRADOS RdP. INTRODUCCIÓN Una red de Petri (RdP) es un grafo orientado con dos clases de nodos: lugares (circunferencias) y transiciones (barras). Los arcos unen un lugar con una transición o viceversa. Un lugar pude contener un número positivo o nulo de marcas. Distribución de marcas en los lugares, marcado → estado de la RdP. Se asocian entradas y salidas a lugares y transiciones (p.e.: salida → lugar marcado; entrada → transición) p 1 t1 p p 2 3 t t3 2 p p5 4 t 4 269 SISTEMAS EMPOTRADOS RdP. INTRODUCCIÓN Evolución de una RdP: Una transición está sensibilizada si todos sus lugares de entrada están marcados Transición sensibilizada => puede disparar Disparo => evolución del estado: Retirada de una marca de cada lugar de entrada, depósito de una marca en cada lugar de salida t1 t1 t2 t2 t3 t3 270 SISTEMAS EMPOTRADOS RdP. INTRODUCCIÓN Ejemplo: Carros que van y vienen sincronizados r2 r1 B D 2 carros l2 l1 A C M 271 SISTEMAS EMPOTRADOS RdP. INTRODUCCIÓN r2 r1 r3 D B F 3 carros l1 l2 A l3 C E M SISTEMAS EMPOTRADOS RdP. FORMALIZACIÓN Y CLASIFICACIÓN Red de Petri (RdP): es una cuádrupla R = {P, T, α, β} tal que P es un conjunto finito y no vacío de lugares T es un conjunto finito y no vacío de transiciones P∩T=Ø α:P x T → N es la función de incidencia previa β:T x P → N es la función de incidencia posterior RdP marcada: es un par {R, Mo}, donde R es una RdP y Mo es un marcado inicial. 272 273 SISTEMAS EMPOTRADOS RdP. FORMALIZACIÓN Y CLASIFICACIÓN Representación gráfica Arco de pi a tj ⇔ α(pi,tj) ≠ 0 Arco de tk a pi ⇔ β(tk,pi) ≠ 0 Arcos etiquetados con un peso = α(pi,tj) ó β(tk,pi) Representación matricial Matriz de incidencia previa: C- = [cij-] donde cij- = α(pi,tj) Matriz de incidencia posterior: C+ = [c +] donde c + = β(t ,p ) ij ij j Matriz de incidencia: C = C+ - Cp1 t1 p1 ⎡− 1 0 1 ⎤ p2 ⎢ 1 0 − 1⎥ ⎥ C= ⎢ p3 ⎢ 2 − 1 0 ⎥ ⎢ ⎥ p4 ⎣ 0 1 − 2 ⎦ 2 p3 p2 t2 p4 t3 2 i SISTEMAS EMPOTRADOS 274 RdP. FORMALIZACIÓN Y CLASIFICACIÓN Clases de RdP RdP ordinaria: sus funciones de incidencia sólo pueden tomar los valores 0 y 1: α(p,t) ∈ {0,1}, β(t,p) ∈ {0,1} » RdP binaria: M(p) ≤ 1 ∀p∈P RdP generalizada (RdPG): las funciones de incidencia pueden tomar valores en todos los números naturales => arcos con peso RdP con arcos inhibidores: 275 SISTEMAS EMPOTRADOS RdP. INTERPRETACIÓN Entradas (eventos discretos, condiciones lógicas externas), salidas (eventos discretos, salidas a nivel), código asociado a las transiciones. abc Acc. impulsionales asociadas a transiciones => disparo instantáneo señal set(s) abc Código/actividades en transiciones => disparo no instantáneo a b c evento ---------- w ------- s a b c 276 SISTEMAS EMPOTRADOS RdP. EJEMPLOS DE MODELADO Ejemplo: Carros con vía común MA lA LA MB LB A rA WA G WB lB rB MU B U Dos carros A y B transportan cierto material desde los puntos de carga LA y LB, respectivamente, hasta el punto de descarga D. Los diferentes movimientos son controlados mediante las señales lA, lB, rA, rB. Si A está en LA y el pulsador MA está oprimido, comienza un ciclo LA-U-LA: espera eventual en WA hasta que la zona común a los dos carros esté libre, con el fin de evitar colisiones; espera obligatoria en U hasta MU (pulsador de fin de descarga). El carro B tiene un funcionamiento similar pero, en caso de demanda simultánea de la vía común, B es prioritario. El recorrido WA-U o WB-U se establece por un cambio de agujas controlado por la acción G. 277 SISTEMAS EMPOTRADOS RdP. EJEMPLOS DE MODELADO Transiciones -> entradas de sensores Lugares -> señales de salida MA MB rB rA WA WB WB G, rA rB U U G MU MU G, lA lB WB WA lB lA LA LB 278 SISTEMAS EMPOTRADOS RdP. EJEMPLOS DE MODELADO Ejemplo: Productor-consumidor Se desea diseñar un sistema de transmisión de datos con las siguientes características: El sistema recibe datos (8 bits) de un puerto paralelo (p.e. PTB del 68HC08), pulso de validación con un IC. Cada dato es procesado e introducido en un buffer con capacidad para 8 datos Los datos son sacados del buffer con política FIFO y enviados por línea serie (SCI) mediante un sencillo protocolo con reenvío PTB T DATO SCI IC ACK/NACK 279 SISTEMAS EMPOTRADOS RdP. EJEMPLOS MODELADO NACK P1 TC51 TP1 llegada_dato leer() TC52 C4 enviar() procesar() TC3 C3 P3 H TP3 sacar() P4 TP4 ACK llegada_caracter TC4 P2 TP2 C5 MUTEX TC2 C2 meter() O TC1 C1 280 SISTEMAS EMPOTRADOS RdP. IMPLEMENTACIÓN Implementación programada de una RdP: Es un programa o algoritmo que simula el disparo de transiciones de la RdP, respetando la reglas de evolución del modelo teórico. Entradas Eventos -> espera a su llegada para que evolucione el sistema » Muestreo / Interrupción Entradas de nivel » Lectura asíncrona – Las entradas se leen conforme se vayan necesitando en el tratamiento – PB: aleatoriedades » Lectura síncrona – Se leen todas las entradas a la vez – Memoria Imagen 281 SISTEMAS EMPOTRADOS RdP. IMPLEMENTACIÓN Salidas Impulsionales o acciones » Asociadas al disparo de transiciones T1 T1/activar(s1,s2) De nivel o mantenidas » Asociadas a lugares marcados Generación » En el instante en que se calculan (asíncrona) » Todas al final del tratamiento (síncrona) s1,s2 T2 T2/desactivar(s2) s1 T3 T3/desactivar(s1) 282 SISTEMAS EMPOTRADOS RdP. IMPLEMENTACIÓN Código Asociado al disparo de transiciones » Disparo no instantáneo DISPARO TRANSICIÓN T: Retirar_Marcas(Lugares_de_entrada_de_T) ; Código_asociado (T) ; Poner_Marcas(Lugares_de_salida_de_T); } 283 SISTEMAS EMPOTRADOS RdP. IMPLEMENTACIÓN INTERPRETADA SECUENCIAL COMPILADA CONCURRENTE 284 SISTEMAS EMPOTRADOS VERIFICACIÓN EXHAUSTIVA Ejemplo: Carros con vía común 1ª aproximación typedef unsigned char MARCADO[NUMLUG] ; MARCADO M ; MARCADO Sig_M = {1,1,1,0, ...} ; ... void main (void) { Inicializacion () ; while (TRUE) { memcpy (&M, &Sig_M, sizeof(M)) ; Generacion_Salidas (M) ; Lectura_Entradas (&MA, &MB, ...) ; /* T0 */ if (M[0] >= 1) { » NOTA: los arrays en C comienzan if (MA) { siempre en Sig_M[0] -= 1 ; Sig_M[13] += 1 ; el índice 0 } } /* T1 */ ... /* T2 */ if ((M[2] >= 1) && (M[3] >= 1)) { if (~WB) { Sig_M[3] -= 1 ; Sig_M[2] -= 1 ; M[2] -= 1 ; /* conflicto? */ Sig_M[5] += 1 ; } } /* T3 */ ... } } 285 SISTEMAS EMPOTRADOS VERIFICACIÓN EXHAUSTIVA Características de la primera aproximación: Compilada » Se genera un programa cuyo flujo de control reproduce el comportamiento de la RdP Secuencial » Un solo proceso Problemas En cada ciclo de tratamiento se verifican todas las transiciones » Sólo unas pocas están sensibilizadas Mucho código Cambio en la red => cambio en el código 286 SISTEMAS EMPOTRADOS VERIFICACIÓN EXHAUSTIVA Ejemplo: Carros con vía común Implementación interpretada #define NUMLUG 15 #define NUMTRANS 14 ... unsigned char M[NUMLUG] = {1,1,1,0, ...} ; unsigned char Sig_M[NUMLUG] = {1,1,1,0, ...} ; /*Estructura de datos que codifica la RdP */ ... void main (void) { Inicializacion () ; while (TRUE) { memcpy (M, Sig_M, sizeof(M)) ; Generacion_Salidas (M) ; Lectura_Entradas (&MA, &MB, ...) ; for (T=0;T <= (NUMTRANS-1); T++) { if (Sensibilizada (T)) { if (Condicion(T)) { Retirar_Marcas (Sig_M, T) ; Retirar_Marcas (M, T) ; Accion (T) ; Poner_Marcas (Sig_M, T) ; } } } } } 287 SISTEMAS EMPOTRADOS VERIFICACIÓN EXHAUSTIVA Características: Interpretada Secuencial El ciclo de tratamiento es independiente de: » la estructura de datos que codifique la red » la red concreta que se implemente => código genérico La ocupación en memoria y prestaciones dependerán en gran medida de la estructura de datos utilizada para codificar la RdP 288 SISTEMAS EMPOTRADOS VERIFICACIÓN EXHAUSTIVA Estructura de datos de la red Representación basada en listas Disminución del tiempo de ejecución » Incidencia previa para la sensibilización » Incidencia previa y posterior para la actualización del marcado Manejo de listas » Memoria dinámica: basada en punteros – rutinas de librería de manejo de memoria dinámica (malloc, free) – difícil de poner a punto » Memoria estática: basada en vectores – mayores prestaciones – más compacto 289 SISTEMAS EMPOTRADOS VERIFICACIÓN EXHAUSTIVA Un ejemplo de estructura de datos basada en listas implementadas en memoria estática #define fin 0xFF ; void Accion0 (void); char Condiccion0(char entrada[]); ... CONST CONST CONST CONST CONST CONST ARCO ARCO ARCO ARCO ARCO ARCO typedef struct { unsigned char Lugar ; unsigned char Peso ; } ARCO ; typedef struct { CONST ARCO *Lugares_Entrada ; CONST ARCO *Lugares_Salida ; void (*Accion) (void); char (*Condicion)(char entrada[]); } T_TRAN ; T0_In[]={{0,1},{fin,0}} ; T0_Out[]={{1,1},{2,2},{fin,0}} ; T1_In[]={{2,1},{fin,0}}; T1_Out[]={{3,1},{fin,0}} ; T2_In[]={{1,1},{3,2},{fin,0}}; T2_Out[]={{0,1},{fin,0}} ; /* 0 1 2 3 */ static unsigned char M[NLUGARES] ={1,0,0,0}; static unsigned char Sig_M[NLUGARES]={1,0,0,0}; p t 0 0 2 p p t 1 p CONST T_TRAN TRAN[NUMTRANS] = {{T0_In, T0_Out, Accion0, Condiccion0} {...} ...} ; t 2 2 2 1 3 290 SISTEMAS EMPOTRADOS VERIFICACIÓN EXHAUSTIVA El algoritmo de interpretación void main (void) { Inicializacion () ; while (TRUE) { memcpy (M, Sig_M, sizeof(M)) ; Generacion_Salidas (M) ; (*Lectura_Entradas)(&entrada) ; for(t=0; t<= (NUMTRANS-1); t++){ if(Sensibilizada(Trans[t],M) && (*Trans[t].Condicion)(entrada)){ Retirar_Marcas(Trans[t],Sig_M) ; /* Retirar_Marcas(Trans[t],M) ; Si existen conflictos efectivos */ (*Trans[t].Accion)(); Poner_Marcas(Trans[t],Sig_M); } }/* fin if disparo de una transicion*/ }/* fin for que recorre las transiciones }/*fin bucle interpretación de la red } 291 SISTEMAS EMPOTRADOS VERIFICACIÓN EXHAUSTIVA Manejo estructura char Sensibilizada(T_TRAN Tran, const unsigned char M[]){ int p; char Sensib = 1; p=0; while((Tran.Lugares_Entrada[p].Lugar != fin) && Sensib==1){ if (M[Tran.Lugares_Entrada[p].Lugar] < Tran.Lugares_Entrada[p].Peso) Sensib = 0; void Retirar_Marcas(T_TRAN Tran, unsigned char M[]) { p++; int p; } return Sensib ; p=0; } while((Tran.Lugares_Entrada[p].Lugar != fin)){ M[Tran.Lugares_Entrada[p].Lugar] -= Tran.Lugares_Entrada[p].Peso; p++; } } void Poner_Marcas(T_TRAN Tran, unsigned char M[]) { ... M[Tran.Lugares_Salida[p].Lugar] += Tran.Lugares_Salida[p].Peso; ... } 292 SISTEMAS EMPOTRADOS VERIFICACIÓN EXHAUSTIVA Redes con arcos unitarios (RdP ordinarias) typedef struct { CONST char *Lugares_Entrada ; CONST char *Lugares_Salida ; void (*Accion) (void); char (*Condicion)(char entrada[]); } T_TRAN ; void Accion0 (void); char Condiccion0(char entrada[]); ... CONST CONST CONST CONST CONST CONST char char char char char char T0_In[]={0,fin} ; T0_Out[]={1,2,fin} ; T1_In[]={2,fin}; T1_Out[]={3,fin} ; T2_In[]={1,3,fin}; T2_Out[]={0,fin} ; /* 0 1 2 3 */ static unsigned char M[NLUGARES] ={1,0,0,0}; static unsigned char Sig_M[NLUGARES]={1,0,0,0}; CONST T_TRAN TRAN[NUMTRANS] = {{T0_In, T0_Out, Accion0, Condiccion0} {...} ...} ; p0 t0 p2 p1 t1 p3 t2 293 SISTEMAS EMPOTRADOS VERIFICACIÓN EXHAUSTIVA Manejo estructura char Sensibilizada(T_TRAN Tran, const unsigned char M[]){ int p; char Sensib = 1; p=0; while((Tran.Lugares_Entrada[p] !=fin) && Sensib==1){ if (M[Tran.Lugares_Entrada[p]] < 1) Sensib = 0; p++; void Retirar_Marcas(T_TRAN Tran, unsigned char M[]) { } int p; return Sensib ; } p=0; while((Tran.Lugares_Entrada[p] !=fin)){ M[Tran.Lugares_Entrada[p]] -- ; p++; } } void Poner_Marcas(T_TRAN Tran, unsigned char M[]) { ... M[Tran.Lugares_Salida[p]] ++ ; ... } SISTEMAS EMPOTRADOS 294 IMP. DIRIGIDA POR EL MARCADO Resolución del problema de la verificación exhaustiva de la sensibilización de transiciones VERIFICACION SELECTIVA Sólo son tratadas aquellas transiciones con posibilidad de estar sensibilizadas » IMPLEMENTACION DIRIGIDA POR EL MARCADO Método de los lugares representantes marcados Cada transición es representada por uno de sus lugares de entrada Sólo aquellas transiciones cuyo lugar representante esté marcado se consideran candidatas al disparo Un lugar de entrada a una transición y que no sea su representante se denomina lugar de sincronización Fase previa: obtención del conjunto de lugares representantes y de sincronización 295 SISTEMAS EMPOTRADOS IMP. DIRIGIDA POR EL MARCADO Elección de lugares representantes Representantes esenciales ¿Partición representantes/sincronización? r2 r1 B D p2 p1 t1 t2 t3 p3 p4 p5 t4 t5 t6 l2 l1 A C M 296 SISTEMAS EMPOTRADOS IMP. DIRIGIDA POR EL MARCADO Un ejemplo void Accion1 (void); char Condiccion1(char entrada[]); ... p3 p0 p4 CONST ARCO T0_Lugares_Sinc[] ={3,fin}; t0 t1 CONST ARCO T0_Lugares_Salida[]={1,fin}; p1 p2 CONST ARCO T1_Lugares_Sinc[] ={4,fin}; CONST ARCO T1_Lugares_Salida[]={2,fin}; CONST T_TRAN LR0[3] = {{0, T0_Lugares_Sinc, T0_Lugares_Salida, t3 t2 Accion1, Condiccion1}, {1, T1_Lugares_Sinc, T1_Lugares_Salida, Accion2, Condiccion2}, {fin,...}}; ... typedef unsigned char ARCO; CONST T_TRAN LR1[2] = ... ; ... typedef struct{ CONST T_TRAN LR2[2] = ... ; CONST unsigned char Trans ; CONST ARCO *Lugares_Sincronizacion ; CONST T_REPRESENTANTE Lug[NREPRESENTANTES] = CONST ARCO *Lugares_Salida; {LR0, LR1, LR2} ; void (*Accion) (void); char (*Condiccion)(char entrada[]); }T_TRAN; typedef T_TRAN *T_REPRESENTANTE ; 297 SISTEMAS EMPOTRADOS IMP. DIRIGIDA POR EL MARCADO ... while(1){ memcpy (M_Sinc, Sig_M_Sinc, nLugaresSinc+1) ; (*Leer_Entrada)(entrada); while (Hay_Reprentante(P_Tratamiento)){ P = Desapila (P_Tratamiento) ; i = 0 ; T = Lug[p][i] ; while (T.Trans != fin) { if (Sensibilizada(T,M_Sinc) && (*T.Condiccion)(entrada)){ Retirar_Marcas(T,Sig_M_Sinc); Retirar_Marcas(T,M_Sinc); (*T.Accion)(); Poner_Marcas(...); } else Apilar (P_Formacion, P) ; i ++ ; T = Lug[p][i] ; } } Intercambia (P_Tratamiento, P_Formacion) ; } p4 p0 p3 t0 t1 p1 p2 t3 t2 p3 true p4 true (M_Sinc) 0 (P_Tratamiento) RdP binaria 298 SISTEMAS EMPOTRADOS SISTEMAS EMPOTRADOS SISTEMAS MUESTREADOS 299 SISTEMAS EMPOTRADOS COMPUTADOR Y MUNDO ANALÓGICO Tratamiento digital de la señal señal analógica señal muestreada x(t) señal digital codificada señal digital codificada señal contínua cuantificada y(t) 0111 0110 0011 0110 0111 0110 x(kT) señal discreta cuantificada y(kT) T Muestreador Codificador Decodificador Algoritmo Conversor A/D Bloqueador Conversor D/A Esquema simplificado x(t) x(k) y(k) y(t) Bo T Muestreador Algoritmo Bloqueador 300 SISTEMAS EMPOTRADOS COMPUTADOR Y MUNDO ANALÓGICO Aplicaciones Telefonía y radio digital Registradores de señales Monitorización de pacientes Alta fidelidad Control ... e(k) yd(k) + u(k) u(t) y(t) Bo - Algoritmo de control y(k) COMPUTADOR Bloqueador T Proceso y(t) Muestreador Sensor 301 SISTEMAS EMPOTRADOS COMPUTADOR Y MUNDO ANALÓGICO Señales discretas y muestreadas Señales discretas: p.e. generadas por un computador Señales muestreadas: una señal continua al ser muestreada da lugar a una señal discreta MUESTREADOR período T • • • T • • • al computador Señal discreta --> representada por una secuencia {xk} p.e. {xk} = {0, 1.5, 1.66, 2, 2.77,…} Algoritmo del computador: ecuaciones en diferencias : x(k+1) = a x(k) + b x(k-1) + c x(k-2) + d u(k) Ecuaciones en diferencias = transformador de secuencias Análisis y diseño Transformada en Z 302 SISTEMAS EMPOTRADOS MUESTREO Y RECONSTRUCCIÓN Muestreo-conversión analógica-digital (CAD) x(t) 0110 x(kT) T void main(void) { Init(); Siguiente = Get_Time () ; Muestreador while(1) { ADSCR=0x00; /*Inicio de la conversion AD*/ while(!COCO); /*Espera fin conversion*/ Valor = ADC ; /*Lectura dato y borrado COCO */ Resultado = Procesado (Valor) ; .... Siguiente = Siguiente + T ; delay_until (Siguiente) ; } } Codificador bloqueador COMPUTADOR Ejemplo en HC08: •Conversión única •No interrupciones •Inicio por software 0110 señal codificada cuantificada señal muestreada 0111 señal analógica 303 SISTEMAS EMPOTRADOS MUESTREO Y RECONSTRUCCIÓN Posibilidades muestreo Arranque de la conversión » A petición de la aplicación » Señal externa de sincronización » Iniciativa del módulo – Conversión continua – Conversión periódica en el 2812) necesidad de una base de tiempos (p.e. EV Fin de conversión y transferencia del dato » Aplicación convertido » Interrupción » DMA lectura del flag de fin de conversión y lectura del dato la lectura la hace la rutina de interrupción el propio periférico deja los datos convertidos en memoria 304 SISTEMAS EMPOTRADOS MUESTREO Y RECONSTRUCCIÓN Teorema de muestreo (Shannon) Una señal continua x(t) cuya transformada de Fourier X(ω) sea de banda limitada (ωs), estará completamente determinada por la secuencia {xk} obtenida por el muestreo de la misma si: ωm ≥ 2ω s ⇒ T ≤ π ωs » Si ωm > 2ωs: reconstrucción perfecta por filtrado paso bajo (amplitud: T) » Si ωm < 2ωs: no se puede reconstruir » En la práctica existen señales de las que no se puede decir que sean de banda limitada: se hablará de muestreo aceptablemente rápido (10 a 100 veces la ω más significativa) 305 SISTEMAS EMPOTRADOS MUESTREO Y RECONSTRUCCIÓN Ejemplo: Sistema con ωd = 0.25 Hz Muestreo con ωm = 10 Hz y con ωm = 0.33 Hz Muestreo con T=0.1 y con T=3 0.18 0.16 0.14 0.12 0.1 0.08 0.06 0.04 0.02 0 0 1 2 3 4 5 t 6 7 8 9 306 SISTEMAS EMPOTRADOS MUESTREO Y RECONSTRUCCIÓN RECONSTRUCCIÓN Transformación de una secuencia (señal discreta) en una señal continua aceptable por el sistema receptor de la señal. Conversión digital-analógica (CDA) - bloqueador señal discreta cuantificada señal digital codificada señal continua cuantificada x(t) 0110 0111 0110 x*(kT) Decodificador COMPUTADOR Bloqueador 307 SISTEMAS EMPOTRADOS MUESTREO Y RECONSTRUCCIÓN Interpoladores: interpolación lineal reconstrucción señal interpolada • • • • kT (k+1)T Para generar la recta hay que conocer el valor de x*((k+1)T) en el instante k En la práctica se utilizan retrasando uno o varios períodos de muestreo la reconstrucción 308 SISTEMAS EMPOTRADOS MUESTREO Y RECONSTRUCCIÓN Bloqueadores: extrapoladores Realizan la reconstrucción en un instante con información anterior a él: realizable Planteamiento: conocidos x(kT), x((k-1)T), …, hay que construir una función continua que aproxime lo más posible la señal hasta el nuevo valor x((k+1)T) Bloqueador de orden 0: Bloqueador de orden 0 • • • • kT (k+1)T 309 SISTEMAS EMPOTRADOS MUESTREO Y RECONSTRUCCION PWM Modulación en anchura de pulso Reconstrucción » Filtro paso bajo Se cambia la anchura de pulso en cada periodo de muestreo señal codificada en anchura de pulso y(t) 0110 0111 0110 señal digital codificada PWM COMPUTADOR Filtro paso bajo 310 SISTEMAS EMPOTRADOS MUESTREO Y RECONSTRUCCION Generación de ondas PWM con un HC08 Se utiliza uno de los TIM Se implementa con un OUTPUT COMPARE y el contaje modular del TCNT actuando sobre las patillas T1CHx » Tpwm se programa con el overflow de contador, haciendo conmutar T1CHx » Ton se programa mediante output compare forzando el cero en T1CHx al expirar la cuenta del output compare Ton Toff Vmáx Vmin Tpwm clear on output compare toggle on overflow 311 SISTEMAS EMPOTRADOS MUESTREO Y RECONSTRUCCION Diagrama de bloques de un TIM 312 SISTEMAS EMPOTRADOS MUESTREO Y RECONSTRUCCION Dos posibilidades Unbuffered (MSOB:MSOA = 01) » Cambio de Ton en cualquier instante Pb. Puede fallar durante dos ciclos Buffered (MSOB:MSOA = 10) » El Ton se cambia en el overflow » Escritura del valor alternativamente en T1CH1 y T1CH0 » Canal 1 deshabilitado void Init_PWM(void){ TSTOP_1 =1; TRST_1 =1; PS2_1 = 0; PS1_1 = 0; PS0_1 = 0; T1MODH= 0x00 ; T1MODL= 0xFF ; T1CH0H=0x00; T1CH0L=0x50; MS0B_1 = 1; MS0A_1 = 0; TOV0_1 = 1; ELS0B_1=1; ELS0A_1=0; TSTOP_1=0; // // // // // // // // // Stop y reset del TIM Preescalado x/1, tick = 0.407 us Carga del valor del periodo del PWM PWM de 8 bits, T = 104.192 us, f=9.597 KHz Valor inicial del Ton Buffered PWM Cambiar la salida cuando se alcance el periodo Poner a cero la salida en la comparacion Arranque del contador } void Set_Value_Char (unsigned char V){ par = !par ; if (par) T1CH0L = V ; else T1CH1L = V ; } 313 SISTEMAS EMPOTRADOS MUESTREO Y RECONSTRUCCION Generación de ondas PWM con un 2812 Se utilizan los Event Managers Se implementa con un OUTPUT COMPARE y el contaje modular del TCNT » Patillas: T1PWM, T2PWM, PWM1:6 » Tpwm se programa con el overflow de contador (GP Timer 1, GP Timer 2), haciendo conmutar la patilla deseada » Ton se programa mediante output compare (Timer 1 compare, Timer 2 compare, Full compare 1:3) forzando un cero o un uno en la patilla al expirar la cuenta del output compare La actualización del Ton es siempre buffered SISTEMAS EMPOTRADOS Event Manager, EV-A y EV-B Estructura interna 314 315 SISTEMAS EMPOTRADOS MUESTREO Y RECONSTRUCCION void Init_PWM (void) { asm(" eallow ; Enable accesses to control registers"); /* Activar el reloj del EV-A */ HISPCP = 0x0000 ; /* Reloj EVA = SYSCLOKOUT/1 */ PCLKCR = 0x0001 ; /* Activación del reloj del EVA */ /* Preescalado y periodo del T1 */ T1CON = 0x0000 ; T1CON |= 0x1000 ; /* 0001_0000_0000_0000 */ /* TMODE(1,0) = 10 Continous up */ /* TPS (2,1,0) = 000 x/1 preescaler */ /* TCLKS (1,0) = 00 SYSCLKOUT */ /* SYSCLKOUT(15 MHz)/1 => tick de T1 = 66.6 ns */ T1PR = 0xFFF ; /* 12 bits */ T1CMPR = 0xFF ; /* Ton = 256*tick */ /* Activacion de las salidas */ GPTCONA = 0x0051 ; /* 0000_0000_0101_0001 */ /* TCMPOE = 1, T1CMPOE = 1 compare output enable */ /* T1PIN(1,0) = 01 active low */ GPAMUX = 0x0040 ; /* T1PWM_T1CMP = 1 Peripheral */ /* Activacion del T1 */ T1CON |= 0x004A ; asm(" edis /* 0000_0000_0100_1010 */ /* TCLD(1,0) = 10 Carga inmediata del reg de comparacion */ /* TENABLE = 1 habilitación del T1 */ /* TECMPR = 1 T1 compare enable */ ; Disable accesses to PIE control registers"); } void Set_Value (unsigned int V) { T1CMPR = 0x0FFF&V ; } 316 SISTEMAS EMPOTRADOS DISEÑO Diseño de sistemas en relación con el mundo analógico (filtros, controladores): Tratamiento digital de la señal Automática ... Resultados del diseño Función de transferencia en s (transformada de Laplace) u ω (transformada de Fourier) Función de transferencia en z (transformada en z) Ecuaciones en diferencias que cumplen las especificaciones de partida (frecuenciales o temporales) 317 SISTEMAS EMPOTRADOS DISEÑO Ejemplo Integración numérica f(t) Sistema f(t) Integral(f(t)) I ( k ) = I ( k −1) + f (k −1)T I ( z ) = I ( z )z −1 + f ( z )z −1T z −1T I (z) = f ( z ) 1 − z −1 kT t 318 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN G(s) --> Ecuación en diferencias X(s) G(s) Y(s) G ( s) = s↔ Ejemplo 1 + bs Y (s ) =K 1 + τs X (s ) Y (s ) + τsY (s ) = KX (s ) + KbsX (s ) dy (t ) dx(t ) = Kx(t ) + Kb dt dt y (kT ) − y ((k − 1)T ) x(kT ) − x((k − 1)T ) = Kx(kT ) + Kb y (kT ) + τ T T 1 ⎛τ x(k ) − x(k − 1) ⎞ y (k ) = ⎜ y (k − 1) + Kx(k ) + Kb ⎟ τ ⎝T T ⎠ 1+ T y (t ) + τ Y (s ) X ( s) d dt 319 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN G(z) --> Ecuación en diferencias X(z) G(z) Y(z) G( z ) = Y (z) X (z ) z −1 ↔ retraso T Ejemplo 1 + bz −1 Y (z ) =K X (z ) 1 + az −1 Y ( z ) + az −1Y ( z ) = KX ( z ) + Kbz −1 X ( z ) y (k ) + ay (k − 1) = Kx(k ) + Kbx(k − 1) y (k ) = Kx(k ) + Kbx(k − 1) − ay (k − 1) 320 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN Todo tratamiento de señal para cualquier aplicación (control, comunicaciones, …) responde a las siguientes ecuaciones en diferencias: K M k =0 m =1 IIR → y (i ) = ∑ b(k )x(i − k ) − ∑ a (m ) y (i − m ) K FIR → y (i ) = ∑ b(k )x(i − k ) k =0 N −1 FFT → X (k ) = ∑ x(n ) n =0 WNkn ; WN = e −j 2π N Los DSPs tienen instrucciones y modos de direccionamiento especiales para calcular estas expresiones de forma eficiente » Bibliotecas de funciones código optimizado para la CPU 321 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN Ecuación en diferencias Algoritmo Ejecución periódica y( k ) = Kx ( k ) + Kbx( k −1) − ay (k −1) void main(void) { ... x_ant = 0 ; Siguiente = Contador ; while(1) { x = Lectura_Entrada () ; y = K*(x + b*x_ant) - a*y ; Generar (y) ; x_ant = x ; Siguiente = Siguiente + T ; delay_until (Siguiente) ; } } 322 SISTEMAS EMPOTRADOS EJEMPLO 1 Control de velocidad de un motor Especificaciones: U » SO = 0 Kp Ke » tr ≤ 2 sg » ep = 0 Modelo del sistema U 3 1+s Y A Y Ks 323 SISTEMAS EMPOTRADOS EJEMPLO 1 Esquema de control COMPUTADOR Yd + E R(z) - Bo U 3 1+s Período de muestreo » Suficiente frecuencia de muestreo para la dinámica deseada » tr ≤ 2s => Tm ≤ tr/10= 0.2 ---> Tm = 0.1 s » Si tick = 1.6667 ms T = 60 Diseño del controlador R(z) 1 − 0.9048z −1 U (z) R( z ) = = 0.5 E( z ) 1 − z −1 Y 324 SISTEMAS EMPOTRADOS EJEMPLO 1 Ecuación en diferencias U (z) 1 − 0.9048z −1 R( z ) = = 0.5 E( z ) 1 − z −1 U ( z ) − z −1U ( z ) = 0. 5E ( z ) − 0.4524z −1 E ( z ) U ( k ) − U (k − 1) = 0.5E ( k ) − 0. 4524z −1 E ( k − 1) U ( k ) = 0. 5E ( k ) − 0. 4524E (k − 1) + U (k −1) Lectura de entradas » Conversión analógico-digital » 0..255 (conversor 8bits) <--> 0..5 V float Lectura_Entrada(void) { ADSCR=0x00; /*Inicio de la conversion AD*/ while(!COCO); /*Espera fin conversion*/ return ((float)ADC*5.0)/255.0 ; } 325 SISTEMAS EMPOTRADOS EJEMPLO 1 Generación de salidas: p.e. PWM void Generar(float Valor) { if (Valor >= 5.0) Set_Value (255) ; else Set_Value ((unsigned char)(Valor*255.0/5.0)) ; } 326 SISTEMAS EMPOTRADOS EJEMPLO 1 Programa de control void main(void) { unsigned int Siguiente ; unsigned int T = 60 ; float E, E_ant, U ; float Yd, Y ; E_ant = 0.0 ; U = 0.0 ; Siguiente = Contador ; while(1) { Y = Lectura_Entrada () ; Yd = Lectura_Consigna () ; E = Yd - Y ; U = 0.5*E - 0.4524*E_ant + U ; Generar (U) ; E_ant = E ; Siguiente = Siguiente + T ; delay_until (Siguiente) ; } } 327 SISTEMAS EMPOTRADOS EJEMPLO 2 Obtener la función de transferencia del controlador que implementa el siguiente programa void main(void) { ... error_k_1 = 0.0 ; accion_k_1 = 0.0 ; accion_k_2 = 0.0 ; Siguiente = Contador ; while(1) { error = leer_error() ; accion = (1-b)*accion_k_1 + b*accion_k_2 + K*(error - a*error_k_1) ; generar (accion) ; error_k_1 = error ; accion_k_2 = accion_k_1 ; accion_k_1 = accion ; Siguiente = Siguiente + T ; delay_until (Siguiente) ; } } 328 SISTEMAS EMPOTRADOS EJEMPLO 2 Función de transferencia accion (k ) = (1 − b ) ∗ accion (k − 1) + b ∗ accion (k − 2 ) + K ∗ (error (k ) − a ∗ error (k − 1)) accion (k ) + (b − 1) ∗ accion (k − 1) − b ∗ accion (k − 2 ) = K ∗ (error (k ) − a ∗ error (k − 1)) accion ( z ) + (b − 1) ∗ accion ( z ) ∗ z −1 − b ∗ accion ( z ) ∗ z −2 = ( K ∗ error ( z ) − a ∗ error ( z ) ∗ z −1 ( ) ( ) ) accion ( z ) 1 + (b − 1)z −1 − bz −2 = K 1 − az −1 error ( z ) accion ( z ) 1 − az −1 1 − az −1 =K =K −1 −2 error ( z ) 1 + (b − 1)z − bz 1 − z −1 1 + bz −1 ( )( ) 329 SISTEMAS EMPOTRADOS EJEMPLO 2 ¿Y de este programa? void main(void) { ... error_k_1 = 0.0 ; accion_k_1 = 0.0 ; accion_k_2 = 0.0 ; Siguiente = Contador ; while(1) { generar (accion) ; error = leer_error() ; accion = (1-b)*accion_k_1 + b*accion_k_2 + K*(error - a*error_k_1) ; error_k_1 = error ; accion_k_2 = accion_k_1 ; accion' ( z ) = z −1accion ( z ) accion_k_1 = accion ; Siguiente = Siguiente + T ; 1 − az −1 −1 delay_until (Siguiente) ; accion' ( z ) = z K 1 − z −1 1 + bz −1 } ( )( ) error ( z ) } 1− az −1 )z −1 ( accion' ( z ) =K error ( z ) (1− z −1 )(1 + bz −1 ) 330 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN EN COMA FIJA Coma fija v.s. coma flotante Rango para el mismo número de bits de representación interna » Coma flotante mucho mayor rango de representación Precisión en la representación » Coma flotante » Coma fija la precisión depende del número representado igual precisión en todo el rango Consumo y precio » CPUs de coma flotante – Alto precio y elevado consumo – Utilizado en estaciones base » CPUs de coma fija – Menor precio y consumo – Utilizados en sistemas móviles SISTEMAS EMPOTRADOS IMPLEMENTACIÓN EN COMA FIJA Representación en coma flotante IEEE Format (754) 331 332 SISTEMAS EMPOTRADOS 0.0625 0.25 0.5 1 2 Representación en coma fija 0.125 IMPLEMENTACIÓN EN COMA FIJA coma ~ Generalizando: V V ≈V = S ×Q + B Q entero S = F × 2E 1≤ F < 2 B sesgo escala S B Q Q E F lo único de se representa posición de la coma escala fraccional o ponderación de bit 333 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN EN COMA FIJA Ejemplo Conversor AD 8 bits, 0..5 V 0..5 V (entrada al conversor) 0..255 (salida de 8 bits) S = F × 2E x−0 y−0 5 = ⇒ xvoltios = y 5 − 0 255 − 0 255 5 S= Q= y 255 lg 2 S = lg 2 F + E = lg 2 5 = −5.6724 255 E = −6 lg 2 F = 0.3276 ⇒ F = 20.3276 = 1.255 B=0 V = xvoltios = 1.255 × 2−6 × Q El resultado de la conversión = representación interna (↓C) 334 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN EN COMA FIJA Formato Q15 Formato estándar en DSPs B=0 F=1 E=-15 V = 2−15 × Q 0 ≤V <1 15 s coma 0 335 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN EN COMA FIJA Aritmética SUMA Va = Vb + Vc Fa 2 E Qa + Ba = Fb 2 E Qb + Bb + Fc 2 E Qc + Bc a Qa = Fb ( E 2 Fa b − Ea ) b Qb + Fc ( E − E ) B + Bc − Ba − E 2 Qc + b 2 ≠ Qb + Qc Fa Fa c Bi = 0 ; Fa=Fb=Fc a a Qa = 2( E b − Ea ) Qb + 2( E − E ) Qc c a Qa = Qb + Qc Ea=Eb=Ec Aritmética c ACUMULACIÓN Bb=0 y Fi=1 Va = Va + Vb Qa = Qa + 2( E b − Ea ) Qb 336 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN EN COMA FIJA Aritmética MULTIPLICACIÓN ( Va = Vb × Vc ) ( Fa 2 E Qa + Ba = Fb 2 E Qb + Bb × Fc 2 E Qc + Bc a Qa = Fb Fc ( E 2 Fa b + Ec − Ea ) Fi=1, Bi=0 Atención!! QbQc + Fb Bc ( E 2 Fa b b − Ea ) Qa = 2( E b Qb + + Ec − Ea ) c ) Fc Bb ( E − E ) B B − Ba − E Qc + b c 2 2 Fa Fa c QbQc Qa,Qc 16bits ⇒ QaxQc 32 bits a a 337 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN EN COMA FIJA U (k ) = 0.5 E (k ) − 0.4524 E (k − 1) + U (k − 1) Ejemplo 1 Representación de los operandos » Yd(k), Y(k) » QYd, QY leídos por el conversor AD de 8 bits unsigned char Y (k ) = 1.255 × 2− 6 × QY Yd (k ) = 1.255 × 2− 6 × QY d QY , QY ∈ [0,255] → 8 bits d COMPUTADOR Yd + E - R(z) Bo U 3 1+s Y 338 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN EN COMA FIJA » QE signed int E (k ) = Yd (k ) − Y (k ) 1.225 × 2− 6 × QE = 1.225 × 2− 6 × QY − 1.225 × 2− 6 × QY d QE = QY − QY → QE ∈ [− 255,255] → 9 bits d » U(k) salida generada por un PWM de 8 bits – Idéntica transformación que la entrada (0..5V – QU unsigned char U (k ) = 1.255 × 2− 6 × QU QU ∈ [0,255] → 8 bits 0..255) 339 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN EN COMA FIJA Representación de los parámetros: a=0.5, b=0.4524 » Representación de 8 bits » Representación no exacta Q7 error de cuantificación 0.5 = 2− 7 × Qa ⇒ Qa = 0.5 × 27 = 64 0.4524 = 2− 7 × Qb ⇒ Qb = 0.4524 × 27 = 57.9 ⇒ Qb ≈ 58 Expresión 1.225 × 2− 6 × QU = 2− 7 × 64 × 1.225 × 2− 6 × QE − 2− 7 × 58 × 1.225 × 2− 6 × QE _ ant + 1.225 × 2− 6 × QU _ ant QU = 2− 7 × 64 × QE − 2− 7 × 58 × QE _ ant + QU _ ant SISTEMAS EMPOTRADOS IMPLEMENTACIÓN EN COMA FIJA Programa int QE, QE_ant ; int ACC ; unsigned char QU, QU_ant ; ... ACC = QU_ant ; ACC += 64*QE >> 7 ; ACC -= 58*QE_ant >> 7 ; if (ACC > 255) QU = 255 ; else if (ACC < =) QU = 0 ; else QU = (unsigned char)ACC ; ... 340 341 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN FIR Un filtro FIR de orden N es descrito por la siguiente ecuación en diferencias: y (i ) = N ∑ h(k )x(i − k ) = k =0 h(0) x(i ) + h(1) x(i − 1) + ... + h( N ) x(i − N ) N+1 coeficientes del filtro h(0)..h(N) N+1 muestras x(i), x(i-1), …, x(i-N) Multiplicación, suma 342 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN FIR Implementación basada en la instrucción DMAC 16-Bit Dual Multiply and Accumulate DMAC ACC:P,loc32,*XAR7++ XT Temp ACC P = = = = [loc32]; Prog[*XAR7 or *XAR7++]; ACC + (XT.MSW * Temp.MSW) << PM; P + (XT.LSW * Temp.LSW) << PM; 343 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN FIR Implementación basada en direccionamiento indirecto circular Loc32 *XAR6%++ Lo apuntado por XAR6, post-incremento % direccionamiento circular if(XAR6(7:0) == XAR1(7:0)) { XAR6(7:0) = 0x00 XAR6(15:8) = unchanged } else { if(16-bit data), XAR6(15:0)=+ 1 if(32-bit data), XAR6(15:0)=+ 2 } XAR6(31:16) = unchanged Longitud buffer = 256 @buffer = XAR6(15:0)&0xFF00 @buffer dentro 64K primeros … @ alineada nx256 XAR6 … … XAR1 344 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN FIR Función en ensamblador pero que se puede llamar desde C void FIR16_init(FIR16_handle) ; void FIR16_calc(FIR16_handle) ; typedef struct { int *coeff_ptr; int *dbuffer_ptr; int cbindex; int order; int input; int output; void (*init)(void *) void (*calc)(void *); }FIR16_handle; /* /* /* /* /* /* /* /* Pointer to Filter co-efficient array Delay buffer pointer Circular Buffer Index Order of the filter Input data Output data Pointer to init function Pointer to the calculation function */ */ */ */ */ */ */ */ 345 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN FIR Preparación SETC SXM,OVM ; Sign extension enabled (16 bits values) ; overflow mode ON SPM -6 ; Create guard band of >> 6 (in product operations) MOVL MOVZ MOVL XAR7,*XAR4 AR1,*+XAR4[4] XAR6,*+XAR4[2] ; ; ; ; ; MOVL MOV MOV MOVL MOVL ACC,*XAR6 AH,@AL AL,*+XAR4[6] *XAR6%++,ACC *+XAR4[2],XAR6 ; ; ; ; ; MOV MOVZ ACC,*+XAR4[5]<<15 ; AR0 = cbindex AR0,AH ; AR0 = order/2 ZAPA XAR4=FIR16_handle->coeff_ptr XAR4 poits to the parameter in the stack XAR7 = coeff_ptr (filter coeficients) AR1 = cbindex (Circular Buffer Index)/ *(XAR4 + 4) XAR6 = dbuffer_ptr (samples) ACC = -:X ACC = X:X ACC = X:Input (Inpunt = new sample) Store in data array and inc circ address update the dbuffer pointer ; Zero the ACC, P registers and OVC counter 346 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN FIR Implementación en coma fija Formato Q15 N y (i ) = ∑ h(k )x(i − k ) = h(0) x(i ) + h(1) x(i − 1) + ... + h( N ) x(i − N ) k =0 2−15 Q y (i ) = 2−15 Qh ( 0) 2−15 Qx (i ) + 2−15 Qh (1) 2−15 Qx (i −1) + K + 2−15 Qh ( N ) 2−15 Qx (i − N ) Qy (i ) = 2−15 Qh ( 0)Qx (i ) + 2−15 Qh (1)Qx (i −1) + K + 2−15 Qh ( N )Qx (i − N ) ( ) Q y (i ) = 2− 6 Qh ( 0)Qx (i ) + 2− 6 Qh (1)Qx (i −1) + K + 2− 6 Qh ( N )Qx (i − N ) 2− 9 347 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN FIR El bucle fundamental RPT AR0 || DMAC ACC:P,*XAR6%++,*XAR7++ ADDL ACC,P ; Add the two sums with shift La saturación MOVW MINL DP,#PosSatVal ACC,@PosSatVal MOVW MAXL DP,#NegSatVal ACC,@NegSatVal MOVH *+XAR4[7],ACC<<7; Store saturated result (Q15) ; Saturate result 348 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN FIR Movimiento en el buffer 349 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN FIR Movimiento en el buffer 350 SISTEMAS EMPOTRADOS IMPLEMENTACIÓN FIR Uso de las funciones #define FIR_ORDER 50 /* Filter Order */ #pragma DATA_SECTION(fir, "firfilt"); FIR16 fir= FIR16_DEFAULTS; #pragma DATA_SECTION(dbuffer,"firldb"); long dbuffer[(FIR_ORDER+2)/2]; const long coeff[(FIR_ORDER+2)/2]= FIR16_LPF50; main() { lpf.dbuffer_ptr=dbuffer; lpf.coeff_ptr=(long *)coeff; lpf.order=FIR_ORDER; lpf.init(&lpf); } void interrupt isr20khz() { lpf.input=xn; lpf.calc(&lpf); yn=lpf.output; } 351 SISTEMAS EMPOTRADOS BLOQUEO DE CONTINUA Eliminación de la continua de una señal. a0 C K + Z-1 R a1 b1 K= 2 RC 2 RC + Ts a0 = 1 fc = 1 2πRC a1 = −1 b1 = 2 RC − Ts 2 RC + Ts + 352 SISTEMAS EMPOTRADOS BLOQUEO DE CONTINUA Código en C Q15 “The DSP handbook”. Bateman&Paterson. Prentice Hall short filter(short sample,float tfc, float tfs, short delay,short *newdelay) { float ts=1/tfs; float rc = 1/(tpi*tfc); float trc = (2*rc)+ts; float fK = (2*rc)/trc; float fb1 = ((2*rc)-ts)/trc; short short short short K=fK*32767; b1=fb1*32767; a0=32767; a1=-32767; short temp1 = (K*sample)>>15 + (delay*b1)>>15 ; short filtered = (delay,a1)>>15 + (temp1,a0)>>15 ; *newdelay=temp1; return filtered; } 353 SISTEMAS EMPOTRADOS SISTEMAS EMPOTRADOS PROCESOS CONCURRENTES 354 SISTEMAS EMPOTRADOS PROCESOS CONCURRENTES Procesos concurrentes: Se dice que dos o más procesos son concurrentes si pueden ejecutarse en paralelo, de forma que alguno de ellos comience a ejecutarse antes que termine algún otro. Programa concurrente: Es un programa que especifica dos o más procesos concurrentes o, de forma equivalente, un programa cuya ejecución se realiza según varios flujos de control que avanzan en paralelo. Paralelismo virtual Monoprocesador: Un único procesador va alternando la ejecución de los diversos procesos (entrelazado) Paralelismo real Multiprocesador: Cada proceso se ejecuta en un procesador diferente. Zona de memoria común (datos comunes). Sistema distribuido: Multiprocesador sin memoria compartida. 355 SISTEMAS EMPOTRADOS ENTRELAZADO Entrelazado y operaciones atómicas Proceso P ; x,y: entero ; Proceso Q ; z,u: entero ; P1: x:=1 ; P2: y:=x+2 ; Q1: z:=3 ; Q2: u:=z+1 ; fin P ; fin Q ; Posibles ejecuciones: (P1; P2; Q1; Q2) (P1; Q1; P2; Q2) (Q1; P1; P2; Q2) ... 356 SISTEMAS EMPOTRADOS ENTRELAZADO Cada instrucción de alto nivel: varias instrucciones código máquina. Por ejemplo: x := y + z ; copiar y, r1 copiar z, r2 sumar r1, r2 copiar r2, x Operaciones atómicas. SISTEMAS EMPOTRADOS 357 COMUNICACIÓN Y SINCRONIZACIÓN La dificultad de la programación concurrente estriba en las interacciones de los procesos: Cooperación para un fin común Competencia por el uso de recursos Son necesarias operaciones de comunicación y sincronización entre procesos: Sincronización: cumplir restricciones sobre el orden en el que se ejecutan sus acciones Comunicación: paso de información de un proceso a otro 358 SISTEMAS EMPOTRADOS EXCLUSIÓN MUTUA Dos procesos compiten cuando comparten: un recurso una variable (comunicación) El acceso al recurso o a la variable debe ser en exclusión mutua. Sección crítica: secuencia de instrucciones que debe ejecutarse en exclusión mutua Mecanismos de sincronización Espera ocupada (busy waiting) Semáforos Monitores 359 SISTEMAS EMPOTRADOS COMPARTICIÓN DE UNA VARIABLE Ejemplo: dos procesos (contador y escritor) comparten una variable n. VARIABLE COMPARTIDA n : entero := 0; proceso contador; principio repetir esperar pulso; n:=n+1; fin repetir; fin; proceso escritor; principio repetir esperar 1 hora; escribir n; n:=0; fin repetir; fin; ERROR: el resultado depende del orden en que se intercalen las instrucciones 360 SISTEMAS EMPOTRADOS COMPARTICIÓN DE UNA VARIABLE Posibles trazas: (escribir n; n:=0; n:=n+1) (escribir n; n:=n+1; n:=0) --> Pérdida de pulso (n:=n+1; escribir n; n:=0) » n := n + 1 ; – copiar n, r1 – sumar r1, 1 / (escritor) n:=0; – copiar r1, n => Pérdida de la puesta a cero de n Problema: entrelazado de las instrucciones en el acceso a la variable común. Solución: garantizar la exclusión mutua en el acceso al elemento compartido. 361 SISTEMAS EMPOTRADOS COMPARTICIÓN DE UNA VARIABLE Sección crítica: Se garantiza que dos procesos no estarán ejecutando a la vez una misma región crítica Monitores, mutex, Test_and_set Ejemplo: dos procesos (contador y escritor) comparten una variable n. n : compartida entero := 0; proceso acumulador; principio repetir esperar impulso; region n hacer n:=n+1; fin; fin repetir; fin; proceso escritor; principio repetir esperar 1 hora; region n hacer escribir n; n:=0; fin; fin repetir; fin; 362 SISTEMAS EMPOTRADOS EXCL. MUTUA E INTERRUPCIONES Las rutinas de servicio de interrupciones (ISR) se ejecutan en concurrencia con el resto de procesos. Exclusión mutua => inhibir interrupciones static int n = 0 ; void rutina_interrupcion(void) { n:=n+1; } void escribe_borra(void) { inhibir_interrupciones() ; escribir(n); n:=0; activar_interrupciones() ; } 363 SISTEMAS EMPOTRADOS COMPARTICIÓN DE UNA VARIABLE En algunos casos excepcionales, puede compartirse una variable sin exclusión mutua, si se cumple: Un proceso la escribe y uno la lee La escritura y lectura se realizan en memoria » el compilador no debe utilizar copias locales en registros para optimizar el uso de la variable La escritura y lectura de la variable son atómicas » debe ser leída con una única instrucción del procesador Ejemplo en C #pragma interrupt_handler Tick void Tick (void) { volatile unsigned int tick_counter ; unsigned int Get_Time (void) { TFLG2 = RTIF ; tick_counter ++ ; } return tick_counter ; } 364 SISTEMAS EMPOTRADOS COMUNICACIÓN Según el tipo de sincronización emisor-receptor: Comunicación asíncrona (buzón, semáforo) » El emisor envía el mensaje y continúa Comunicación síncrona (cita y cita extendida) » El emisor espera a que el receptor reciba el mensaje 365 SISTEMAS EMPOTRADOS ACTIVACIÓN DE TAREAS Un sistema empotrado puede ser un sistema concurrente, compuesto por procesos. Desde el punto de vista del tiempo, varios tipos de procesos: Procesos periódicos: son aquellos que se activan regularmente en instantes de tiempo separados por un período de tiempo determinado. proceso P; cada T repetir actividad; fin repetir; fin P; que se activan de forma Procesos esporádicos: son aquellos irregular, cada vez que se producen ciertos eventos externos. Procesos de fondo proceso E; repetir esperar Evento ; actividad; fin repetir; fin E; 366 SISTEMAS EMPOTRADOS ESPECIFICACIONES TEMPORALES Marco temporal de una tarea: es el conjunto de atributos temporales asociados. T Periodo de ejecución (P), o separación mínima entre eventos (S) C Tiempo de cómputo máximo R Tiempo de respuesta D Plazo de respuesta (deadline) activación comienzo k c1 fin activación k+1 c = c1 + c2 + c3 c2 c3 latencia R t f (k) D T t a (k) t a (k+1) 367 SISTEMAS EMPOTRADOS ESPECIFICACIONES TEMPORALES Corrección temporal de un proceso => en cada ejecución comenzar después de su activación terminar antes de su plazo de respuesta Activación Ejecución válida Plazo de respuesta 368 SISTEMAS EMPOTRADOS SISTEMAS EMPOTRADOS EJECUTIVOS CÍCLICOS 369 SISTEMAS EMPOTRADOS MODELO DE TAREAS Consideraremos inicialmente un modelo de tareas simple: Conjunto de tareas estático Todas las tareas son periódicas Las tareas son independientes entre sí Se conoce el tiempo de ejecución máximo de cada tarea C i Cada tarea tiene un plazo de respuesta D i ≤ T i Después veremos como incorporar tareas esporádicas 370 SISTEMAS EMPOTRADOS PLAN PRINCIPAL Ejecutivo cíclico: estructura de control o programa cíclico que entrelaza de forma explícita la ejecución de diversos procesos periódicos en un único procesador. El entrelazado es fijo y está definido en el denominado plan principal que es construido antes de poner en marcha el sistema Plan principal: especificación del entrelazado de varios procesos periódicos durante un período de tiempo (ciclo principal) de tal forma que su ejecución cíclica garantiza el cumplimiento de los plazos de los procesos La duración del ciclo principal es igual al mínimo común múltiplo de los períodos de los procesos » M = mcm (Ti) » se supone tiempo entero (p.e. Número de ticks) » el comportamiento temporal del sistema se repite cada ciclo principal 371 SISTEMAS EMPOTRADOS PLANES SECUNDARIOS Cada plan principal es dividido en uno o más planes secundarios o marcos (“frames”) que se ejecutarán de forma secuencial. Cada comienzo/fin de un marco en el ejecutivo cíclico se sincroniza con el reloj. Son puntos donde se fuerza la corrección del tiempo real. Por simplicidad, en la práctica, la duración de todos los marcos es la misma. A esta duración se le denomina ciclo secundario. Si las acciones definidas en un marco acaban antes de que concluya el ciclo secundario el ejecutivo cíclico espera (p.e. en un WAI) Si las acciones definidas en un marco no han acabado al terminar el ciclo secundario, se produce un error: desbordamiento de marco. Si la duración de una acción es superior al ciclo secundario debe ser descompuesta en subacciones 372 SISTEMAS EMPOTRADOS EJEMPLO Tarea T A 25 B 25 C 50 D 50 E 100 D 25 25 50 50 100 C 10 8 5 4 2 • Ciclo principal: 100 ticks • Ciclo secundario: 25 ticks M = 100 ticks m = 25 ticks A 0 B C A 25 B A DE 50 B C A 75 B D 100 373 SISTEMAS EMPOTRADOS EJEMPLO Ejecutivo cíclico: void Ejecutivo_Ciclico(void) { unsigned int m = 25 ; unsigned int siguiente ; int marco = 0, num_marcos = 4 ; siguiente = Get_Time () ; while(1) { marco = (marco % num_marcos)+1 ; switch (marco) { case 1: A; B; C; break ; case 2: A; B; D; E; break ; case 3: A; B; C; break ; case 4: A; B; D; break ; } siguiente += m ; delay_until(siguiente) ; } } 374 SISTEMAS EMPOTRADOS PROPIEDADES No hay concurrencia en la ejecución » Cada ciclo secundario es una secuencia de llamadas a procedimientos » No se necesita un núcleo de ejecución multitarea Los procedimientos pueden compartir datos » No se necesitan mecanismos de exclusión mutua como los semáforos o monitores SISTEMAS EMPOTRADOS 375 DETERMINACION DE LOS CICLOS Sea un conjunto de procesos periódicos {Pi / i = 1..n}, con requisitos temporales representados por ternas (Ci, Ti, Di). Ciclo principal: » M = mcm (Ti) Ciclo secundario » m ≤ min(Di) » m ≥ max(Ci) » ∃k: M = km » ∀i: m+ (m - mcd(m,Ti)) ≤ Di – garantiza que entre el instante de activación de cada proceso y su plazo límite exista un marco o ciclo secundario completo – m - mcd(m,Ti) es el retraso máximo entre la activación de un proceso y el comienzo del siguiente marco – esta condición incluye a la primera 376 SISTEMAS EMPOTRADOS EJEMPLO Considérese tres procesos » P C T D » E 1 14 14 » F 2 20 20 » G 3 22 22 Ciclo principal » M = mcm(14,20,22) = 1540 Ciclo secundario » m ≤ min(14,20,22) => m = 1..14 » m ≥ max(1,2,3) => m = 3..14 » ∃k: 1540 = km => m = 4,5,7,10,11,14 » m+ (m - mcd(m,Ti)) ≤ Di => m = 4,5,7 377 SISTEMAS EMPOTRADOS EJEMPLO para m = 4 i 1 2 3 Ti 14 20 22 mcd(m,Ti) retraso 2 2 4 0 2 2 m=4 E F G 14 6 m+retraso 6 < 4 < 6 < 20 4 6 22 Di 14 20 22 378 SISTEMAS EMPOTRADOS EJEMPLO para m = 10 i 1 Ti 14 mcd(m,Ti) retraso 2 8 m+retraso 18 > 18 14 m = 10 E F G 0 14 28 42 56 Di 14 NO 379 SISTEMAS EMPOTRADOS INCLUSIÓN DE PROCESOS PERÍODICOS En cada ciclo principal se tienen ncs = M/m ciclos secundarios En cada plan principal se tienen nei = M/Ti ejecuciones de cada proceso Pi Hay que definir la secuencia de procesos de cada marco: σx:{Pik,Pjl,..,Prs} La ejecución k-ésima de un proceso Pi caracterizado por ternas (Ci, Ti, Di) podrá ser incluida en los marcos j-ésimos que comienzan después de la activación de Pik y terminan antes del deadline de Pik: (k − 1)Ti ≤ ( j − 1)m jm ≤ (k −1)Ti + Di Para que la ejecución k-ésima de Pi pueda ser incluida en la secuencia de procesos σx del marco x, debe quedar suficiente tiempo libre en el marco: Ci ≤ m − ∑ Cl ∀l,Pl ∈σ x 380 SISTEMAS EMPOTRADOS PLANIFICACIÓN Objetivo: asignación de procesos (o subprocesos) a los marcos de forma que se cumplan los requisitos temporales Planteamiento: búsqueda en el espacio de estados Estado: asignación parcial Algoritmo: búsqueda en profundidad con retroceso » se pretende encontrar una única solución Guiado de la búsqueda: heurísticas » sobre el siguiente proceso a asignar – primero el más urgente o el más frecuente – primero el de tiempo de proceso más grande » si varios marcos cumplen las condiciones: – el primer marco que cumpla las condiciones – el marco con menor tiempo de cómputo libre 381 SISTEMAS EMPOTRADOS EJEMPLO: PLANIFICACIÓN Conjunto de procesos a planificar: Proceso C T D P1 2 8 8 P2 3 8 8 P3 1 6 6 P4 2 12 12 Ciclo principal: M = mcm(6,8,12) = 24 Número de ejecuciones a planificar » ne1 = M/8 = 3 » ne2 = M/8 = 3 » ne3 = M/6 = 4 » ne4 = M/12 = 2 382 SISTEMAS EMPOTRADOS EJEMPLO: PLANIFICACIÓN Ciclo secundario » m ≤ min(6,8,12) => m = 1..6 » m ≥ max(1,2,3) => m = 3..6 » ∃k: 24 = km => m = 3,4,6 » m+ (m - mcd(m,Ti)) ≤ Di => m = 3,4 posibles_m = {4,3} 383 SISTEMAS EMPOTRADOS EJEMPLO: PLANIFICACIÓN Ordenación procesos: primero el más urgente Proceso C T D n P1 1 6 6 4 P2 3 8 8 3 P3 2 8 8 3 P4 2 12 12 2 Se intenta planificar primero para m=4 (la complejidad del problema disminuye con el número de marcos) Un planificación consta de 6 marcos consecutivos 384 SISTEMAS EMPOTRADOS EJEMPLO: PLANIFICACION Pik puede ir en el marco j si: (k − 1)Ti ≤ ( j − 1)m jm ≤ (k −1)Ti + Di P11 P1 0 P12 4 8 P21 P2 0 0 12 16 0 4 8 12 16 20 P32 4 4 20 8 12 24 P23 24 P33 16 20 24 20 24 P42 P41 P4 P14 P22 P31 P3 P13 8 12 16 385 SISTEMAS EMPOTRADOS EJEMPLO: PLANIFICACIÓN 1 1 1 1 1 2 1 2 1 2 1 2 1 1 2 1 2 1 2 1 1 3 1 1 2 1 1 2 1 1 2 1 2 2 3 3 3 2 3 3 1 2 1 1 2 2 1 1 2 1 1 2 2 1 1 3 1 1 2 1 1 2 1 1 2 1 1 3 1 1 3 1 2 1 3 1 1 3 1 2 2 3 2 3 3 3 2 3 1 2 1 1 2 2 3 2 4 2 3 4 2 386 SISTEMAS EMPOTRADOS PARTICIÓN DE PROCESOS Hay casos en que un conjunto de procesos que no es planificable: Si el tiempo de cómputo de uno es mayor que el plazo de algún otro: Ci > Dk => No existe valor de m que cumpla a la vez: » m ≤ min(Di) » m ≥ max(Ci) Si para una ejecución de un proceso no queda ningún marco con suficiente tiempo libre Solución: descomponer el proceso demasiado largo Pi=(Ci,Ti,Di) en varios subprocesos Pij=(Cij,Tij,Dij): Tij=Ti ; Dij=Di Ci1+Ci2+Ci3+... = Ci no partir secciones críticas relación de precedencia en cada una de las ejecuciones a mantener en la planificación: Pi1→Pi2→Pi3→... 387 SISTEMAS EMPOTRADOS RELACIONES DE PRECEDENCIA Sean Pi1 y Pi2 dos procesos entre los que existe una relación de precedencia Pi1→Pi2, En la ordenación de los procesos para su inclusión en la planificación se mantiene el orden de precedencia (los dos subprocesos tienen las mismas restricciones temporales) Para incluir la ejecución k-ésima de Pi2, Pi2k, en la planificación: » obtener los valores {j,...,j+h} de los marcos donde puede ser incluida a partir de: (k − 1)Ti ≤ ( j − 1)m jm ≤ (k −1)Ti + Di » Debido al orden de inclusión Pi1k ya ha sido incluida en el marco j+l ∈ {j,...,j+h}. El conjunto de marcos donde puede ser incluida se reduce a {j+l,...,j+h} » A los elementos de {j+l,...,j+h} se aplica la condición Ci2 ≤ m − ∑ Cl ∀l,Pl ∈σ x 388 SISTEMAS EMPOTRADOS EJEMPLO: PARTICIÓN DE PROCESOS Conjunto de procesos a planificar: Proceso C T D P1 2 6 6 P2 2 8 8 P3 8 24 20 Ciclo principal » M = mcm(6,8,24) = 24 Ciclo secundario » m ≤ min(6,8,20) => m = 1..6 » m ≥ max(2,2,8) => no hay ningún m que lo cumpla Es preciso partir el proceso P3 en varios subprocesos con tiempo de cómputo menor que 6 unidades de tiempo Partición en P31 → P32 con igual tiempo de cómputo, 4 unidades 389 SISTEMAS EMPOTRADOS EJEMPLO: PARTICIÓN DE PROCESOS Conjunto de procesos a planificar: Proceso C T D P1 2 6 6 P2 2 8 8 P31 4 24 20 P32 4 24 20 Ciclo principal » M = mcm(6,8,24) = 24 Número de ejecuciones a planificar » ne1 = M/6 = 4 » ne2 = M/8 = 3 » ne31 = M/24 = 1 » ne32 = M/24 = 1 SISTEMAS EMPOTRADOS EJEMPLO: PARTICION DE PROCESOS Ciclo secundario » m ≤ min(6,8,20) => m = 1..6 » m ≥ max(2,2,4) => m = 4..6 » ∃k: 24 = km => m = 4,6 » m+ (m - mcd(m,Ti)) ≤ Di => m = 4 Unica posibilidad de planificación m=4 Ordenación de procesos: primero el más urgente manteniendo relaciones de precedencia » Misma tabla anterior P1 → P2 → P31→ P32 Un planificación consta de 6 marcos consecutivos: M = 6m 390 391 SISTEMAS EMPOTRADOS EJEMPLO: PARTICIÓN DE PROCESOS 1 1 1 1 1 2 1 2 1 1 2 1 2 1 1 2 1 2 1 31 1 1 2 1 2 1 31 1 1 2 1 2 1 31 1 1 32 1 2 2 2 2 2 392 SISTEMAS EMPOTRADOS PARTICIÓN CON SECCIONES CRÍTICAS Si es preciso partir algún proceso en subprocesos, no deben partirse las secciones críticas con objeto de preservar la exclusión mutua Ejemplo: Planificar la ejecución de los siguientes procesos: P C T D P1 20 100 100 P2 25 150 150 P3 90 300 300 Dichos procesos acceden a una sección crítica común tal y como muestra el siguiente esquema: P1 15 P2 15 P3 15 5 10 20 15 40 SISTEMAS EMPOTRADOS PARTICIÓN CON SECCIONES CRÍTICAS Ciclo principal » M = mcm(100,150,300) = 300 Número de ejecuciones a planificar » ne1 = M/100 = 3 ; ne2 = M/150 = 2 ; ne3 = M/300 = 1 Ciclo secundario » m ≤ min(100,150,300) => m = 1..100 » m ≥ max(20,25,90) => m = 90..100 » ∃k: 300 = km => m = 100 » m+ (m - mcd(m,Ti)) ≤ Di => m = 100 Posibles valores de m = {100} Ordenación procesos: primero el más urgente » Misma ordenación que en el enunciado Un planificación consta de 3 marcos consecutivos 393 394 SISTEMAS EMPOTRADOS PARTICIÓN CON SECCIONES CRÍTICAS No existe planificación porque no queda ningún marco donde quepa el proceso P3 Partición de P3 » Tiempo sobrante en los marcos: 55, 80, 55 ms » P31: primera sección crítica + segundo segmento código » P32: segunda sección crítica + cuarto segmento código 1 1 1 1 1 1 2 2 395 SISTEMAS EMPOTRADOS PARTICIÓN CON SECCIONES CRÍTICAS Nueva especificación de procesos: P C T D P1 20 100 100 P2 25 150 150 P31 35 300 300 P32 55 300 300 Ciclo principal » M = mcm(100,150,300) = 300 Número de ejecuciones a planificar » ne1 = M/100 = 3 » ne2 = M/150 = 2 » ne31 = M/300 = 1 » ne32 = M/300 = 1 396 SISTEMAS EMPOTRADOS PARTICIÓN CON SECCIONES CRÍTICAS Ciclo secundario » m ≤ min(100,150,300) => m = 1..100 » m ≥ max(20,25,35,55) => m = 55..100 » ∃k: 300 = km => m = 60,75,100 » m+ (m - mcd(m,Ti)) ≤ Di => m = 60,100 Posibles valores de m = {60,100} Para m=100: 1 1 1 1 1 1 2 1 1 1 2 32 2 2 31 397 SISTEMAS EMPOTRADOS PROCESOS ESPORÁDICOS Proceso esporádico E: atención a eventos externos aperiódicos SE : separación mínima entre eventos DE : plazo límite ( normalmente DE ≤ SE ) CE : tiempo de cómputo máximo En un ejecutivo cíclico los procesos esporádicos pueden programarse de dos formas: Por muestreo periódico del evento Por interrupción 398 SISTEMAS EMPOTRADOS ESPORÁDICOS POR MUESTREO Se programa el proceso esporádico como un proceso periódico que consulta si ha llegado un evento, y en tal caso, lo procesa. Transformamos el proceso esporádico en periódico con D’ = T’ ≤ DE / 2, y lo planificamos de la forma convencional » Si el proceso periódico cumple sus plazos, cualquier evento se atiende en su plazo DE T’ Proceso periódico DE evento Se consulta, y no hay evento Hay evento, y se procesa CE 399 SISTEMAS EMPOTRADOS EJEMPLO 1 Conjunto de procesos a planificar: Proceso C T D S E 1 8 20 P1 3 6 6 P2 2 12 12 Proceso periódico equivalente: D’ = T’= 4 ≤ DE / 2 Proceso C T D PE 1 4 4 P1 3 6 6 P2 2 12 12 Ciclo principal » M = mcm(4,6,12) = 12 Ejecuciones a planificar: nE = M/4 = 3 ; n1 = M/6 = 2 ; n2 = M/24 = 1 400 SISTEMAS EMPOTRADOS EJEMPLO 1 Ciclo secundario » m ≤ min(4,6,12) => m = 1..4 » m ≥ max(1,2,3) => m = 3..4 » ∃k: 12 = km => m = 3,4 » m+ (m - mcd(m,Ti)) ≤ Di => m = 4 Plan de 3 marcos de duración m=4 E E E E E E 1 E E E 1 1 2 1 401 SISTEMAS EMPOTRADOS ESPORÁDICOS POR INTERRUPCIÓN La llegada del evento produce una interrupción, y el evento se trata inmediatamente Basta con reservar tiempo en cada marco para atender el máximo número de eventos que pueden llegar en un marco: Cres ⎡m⎤ = ⎢ ⎥C E ⎢ SE ⎥ 402 SISTEMAS EMPOTRADOS EJEMPLO 2 Conjunto de procesos a planificar (primero el más urgente): Proceso C T D S E 1 7 10 P2 3 8 8 P3 2 8 8 P4 2 12 12 Calculamos los ciclos con los periódicos Ciclo principal » M = mcm(8,12) = 24 Número de ejecuciones a planificar » ne2 = M/8 = 3 » ne3 = M/8 = 3 » ne4 = M/12 = 2 403 SISTEMAS EMPOTRADOS EJEMPLO 2 Ciclo secundario » m ≤ min(8,12) => m = 1..8 » m ≥ max(2,3) => m = 3..8 » ∃k: 24 = km => m = 3,4,6,8 » m+ (m - mcd(m,Ti)) ≤ Di => m = 3,4,8 Probamos con 3 marcos de duración m=8 En cada uno reservamos tiempo para atender un evento Cres ⎡m⎤ = ⎢ ⎥ CE ⎢ SE ⎥ 404 SISTEMAS EMPOTRADOS EJEMPLO 2 E E E E E E P2 P2 P2 E E E P2 P2 P2 P3 P3 P3 E E E P2 P2 P2 P3 P3 P3 P4 P4 405 SISTEMAS EMPOTRADOS PROGRAMACIÓN DEL EJECUTIVO Mediante un ejemplo: Cuatro procesos (plazo = periodo) (C,T,D): A=(1,10,10), B=(3,10,10), C=(2,20,20), D=(8,20,20) Proceso C T D A 1 10 10 B 3 10 10 C 2 20 20 D1 2 20 20 D2 6 20 20 Planificación: » M = 20, m=10 0 A B 6 C D1 10 A B 14 D2 20 SISTEMAS EMPOTRADOS PROGRAMACIÓN DEL EJECUTIVO Ejemplo de implementación en el 68HC08. Tamaño de marco = número entero de ticks Ejecutivo cíclico = actividad periódica » delay basado en el TBM » Activación basada en los TIM 406 407 SISTEMAS EMPOTRADOS PROGRAMACIÓN DEL EJECUTIVO Basado en la TBM y CGMXCKK = 4.9152 Supongamos unidades de tiempo = milisegundos m = 10 ms Divisor µs N ticks void Ejecutivo_Ciclico_1(void) { unsigned int m = 6 ; unsigned int siguiente ; unsigned int marco = 0, num_marcos = 2 ; 8 1,627604167 6144,000 Init_Clock() ; siguiente = Clock() ; while(1) { marco = (marco % num_marcos)+1 ; switch (marco) { case 1: A; B; C; D1; break ; case 2: A; B; D2; break ; } siguiente += m ; delay_until(siguiente) ; } 16 3,255208333 3072,000 32 6,510416667 1536,000 64 13,02083333 768,000 128 26,04166667 384,000 2048 416,6666667 24,000 8192 1666,666667 6,000 32768 6666,666667 1,500 } 408 SISTEMAS EMPOTRADOS PROGRAMACIÓN DEL EJECUTIVO Basado en los TIMER (bus clock = 2.4575) u.t. = ms m = 10 ms #include “timer.h” Divisor tick N ticks void Ejecutivo_Ciclico_3(void) { unsigned int m = 24576 ; unsigned int marco = 0, num_marcos = 2 ; 1 0,406901042 24576,000 Init_OC(m) ; while(1) { marco = (marco % num_marcos)+1 ; switch (marco) { case 1: A; B; C; D1; break ; case 2: A; B; D2; break ; } marco_activo = 0 ; while (marco_activo == 0) asm wai ; /* espera interrupcion */ } 2 0,813802083 12288,000 4 1,627604167 6144,000 8 3,255208333 3072,000 16 6,510416667 1536,000 32 13,02083333 768,000 64 26,04166667 384,000 } 409 SISTEMAS EMPOTRADOS PROGRAMACIÓN DEL EJECUTIVO Basado en los OCs Posibilidad de detectar desbordamientos de marco #include “timer.h” /* timer.h */ volatile unsigned char marco_activo ; void Init_TIM(unsigned int N_Ticks) { T1MODH = N_Ticks/256 ; void Init_TIM (unsigned int N_Ticks) ; T1MODL = N_Ticks%256 ; T1SC &= 0x7F ; // Borrar TOF TOIE_1 = 1 ; // Habilitar interrupción TSTOP_1 = 0 ; // Activar timer } void interrupt 6 Overflow_Handler (void) { T1SC &= 0x7F ; /* Borrar TOF */ if (marco_activo) desbordamiento_de_marco() ; else marco_activo = 1 ; } 410 SISTEMAS EMPOTRADOS SISTEMAS EMPOTRADOS PRIORIDADES E INTERRUPCIONES 411 SISTEMAS EMPOTRADOS PLANIFICACION Métodos: Planificación estática “off-line” » Planificación cíclica Planificación basada en prioridades » Prioridades estáticas – Prioridad al más frecuente (Rate monotonic) – Prioridad al más urgente (Deadline monotonic) » Prioridades dinámicas – Proximidad del plazo de respuesta (Earliest deadline first) – Prioridad al de menor holgura (Least Laxity First) 412 SISTEMAS EMPOTRADOS PRIORIDADES La prioridad es un atributo de las tareas normalmente ligado a su importancia relativa en el conjunto de tareas. Planificación por prioridades: en cada momento se ejecuta la tarea más prioritaria de entre todas las ejecutables (preparadas). Planificación expulsiva: se abandona inmediatamente la ejecución de la tarea en ejecución cuando otra más prioritaria pasa al estado preparada para ejecución. La prioridad de una tarea puede ser: Estática: la prioridad permanece constante a lo largo de la existencia de la tarea. Dinámica: la prioridad puede variar en función del estado o modo de funcionamiento del sistema. preparado nuevo espera activo ejecución terminado 413 SISTEMAS EMPOTRADOS PRIORIDADES Ejemplo: T1 = (5,20,20) T2 = (10,40,40) T3 = (40,80,80) Prio(T1) > Prio(T2) > Prio(T3) T1 T2 fin T3 T3 0 10 20 30 40 50 60 70 80 414 SISTEMAS EMPOTRADOS PRIORIDADES Factor de utilización Es una medida de la carga del procesador. El factor de utilización de una tarea Ti es: Ui = Ci Pi El factor de utilización total del sistema es n n U = ∑U i = ∑ Ci Pi utilización está limitado a =1 factor i =1 de Con un solo procesador, iel » U≤1 415 SISTEMAS EMPOTRADOS PRIORIDADES Planificación basada en prioridades Prioridades estáticas y planificación expulsiva. Frecuentemente se asignan prioridades a las tareas según su "importancia". De esta forma no se puede calcular si se pueden garantizar los plazos o no. Puede fallar incluso con factores de utilización muy bajos. Ejemplo: T C P U T1 10 50 0.20 T2 2 10 0.20 0.40 a fin T1 a T2 Si hacemos prio(T1) > prio(T2), T2 falla. 0 a a a 20 30 fallo 10 416 SISTEMAS EMPOTRADOS PRIORIDADES Prioridad al más frecuente (RMS) Si (plazo de respuesta = periodo) & (tareas periódicas) entonces la asignación de prioridades más altas a las tareas más frecuentes (período más corto) es óptima (Liu & Layland, 1973). Por óptima se entiende que no hay ninguna otra planificación mejor. Si de esta forma no se obtiene un plan admisible, no se puede obtener con ningún otro método basado en prioridades estáticas. Ejemplo: T C P U T1 10 50 0.20 T2 2 10 0.20 0.40 a … T1 a a a a T2 0 10 Hacemos ahora prio(T2) > prio(T1), ya que P2 < P1 terminan a tiempo 20 las dos tareas30 417 SISTEMAS EMPOTRADOS PRIORIDADES. GARANTIA DE PLAZOS Teorema 1 (Liu & Layland): En un sistema de n tareas periódicas independientes con prioridades asignadas en orden de frecuencia, se cumplen todos los plazos de respuesta, para cualquier desfase inicial de las tareas, si n U =∑ Ci ≤ n( 21/ n − 1) = U 0 ( n) P i =1 i U0(n) es la utilización mínima garantizada para n tareas. U 0 (1) = 1.000 U 0 ( 2) = 0.828 U 0 (3) = 0.779 U 0 ( 4) = 0.757 U 0 (5) = 0.743 ... limU 0 (n) = 0.693 = ln 2 n→∞ 418 SISTEMAS EMPOTRADOS PRIORIDADES Prioridad al más urgente (DMS) Si (plazo de respuesta ≤ periodo) entonces la asignación de prioridades más altas a las tareas más urgentes (plazo de respuesta más corto) es óptima (Leung & Whitehead, 1982). Ejemplo: T C D P T1 6 15 15 T2 6 10 20 DMS => Prio(T1) < Prio(T2) T1 T2 0 5 10 15 20 25 30 35 40 419 SISTEMAS EMPOTRADOS PRIORIDADES. GARANTIA DE PLAZOS Test 1: En un sistema de n tareas periódicas independientes con prioridades asignadas en orden de urgencia, se cumplen todos los plazos de respuesta, para cualquier desfase inicial de las tareas, si: donde ∀i,1 ≤ i ≤ n, Ci I i + ≤1 Di Di i −1 ⎡ D⎤ I i = ∑ ⎢ i ⎥C j P j =1 ⎢ j ⎥ Ii se denomina tiempo de interferencia de la tarea Ti Las tareas esporádicas se consideran como si fueran periódicas con periodo = al tiempo de separación mínimo SISTEMAS EMPOTRADOS IMPLEMENTACIÓN PRIORIDADES Posibilidades Núcleo Sin núcleo, basado en interrupciones » Una interrupción periódica por proceso periódico » Una interrupción externa/interna por proceso esporádico » Código de las tareas → rutina de interrupción » Planificación expulsiva → interrupciones encajadas » Prioridades → gestión de quién puede interrumpir a quien 420 SISTEMAS EMPOTRADOS 421 MODELO DE INTERRUPCIONES 68HC08 Secuencia en una interrupción espera fin instrucción curso (peor caso DIV, 7 ciclos) Apilar registros de la CPU: PC, A, X, CCR » NO se apila H (parte alta del registro de índice) Enmascarar interrupciones (I = 1) » Por defecto las interrupciones no se anidan Cargar en el PC el vector de la interrupción pendiente más prioritaria Ejecución del código de la rutina de interrupción En el RTI se desapilan los registros de la CPU » Se retoma el I (se vuelven a habilitar las interrupciones) » Se retoma el PC (se reanuda el programa interrumpido en la siguiente instrucción) 422 SISTEMAS EMPOTRADOS MODELO DE INTERRUPCIONES 68HC08 » Tabla de interrupciones Source Reset SW Iinstruction IRQ pin CGM(PLL) TIM1 channel 0 TIM1 channel 1 TIM1 overflow TIM2 channel 0 TIM2 channel 1 TIM2 overflow SPI receiver full SPI overflow SPI modefault SP transmitter empty SCI receiver overrun SCI noise fag SCI raming error SCI parity error SCI receiver full SCI input idle SCI transmitter empty SCI transmission complete Keyboard pin ADC conversion complete Timebase Flag None None IRQF PLLF CH0F CH1F TOF CH0F CH1F TOF SPRF OVRF MODF SPTE OR NF FE PE SCRF IDLE SCTE TC KEYF COCO TBIF Mask None None IMASK PLLIE CH0IE CH1IE TOIE CH0IE CH1IE TOIE SPRIE ERRIE ERRIE SPTIE ORIE NEIE FEIE PEIE SCRIE ILIE SCTIE TCIE IMASKK AIEN TBIE INT Register Flag Priority VectorAddress None 0 $FFFE–$FFFF None 0 $FFFC–$FFFD IF1 1 $FFFA–$FFFB IF2 2 $FFF8–$FFF9 IF3 3 $FFF6–$FFF7 IF4 4 $FFF4–$FFF5 IF5 5 $FFF2–$FFF3 IF6 6 $FFF0–$FFF1 IF7 7 $FFEE–$FFEF IF8 8 $FFEC–$FFED IF9 9 $FFEA–$FFEB Code Warrior Int Num 1 2 3 4 5 6 7 8 9 10 IF10 IF11 10 11 $FFE8–$FFE9 $FFE6–$FFE7 11 12 IF12 12 $FFE4–$FFE5 13 IF13 13 $FFE2–$FFE3 14 IF14 IF15 IF16 14 15 16 $FFE0–$FFE1 $FFDE–$FFDF $FFDC–$FFDD 15 16 17 423 SISTEMAS EMPOTRADOS RECURSOS EN EL 68HC08 Activación de procesos: Periódicos » OCs – TIM1 overflow, TIM1 channel 0, TIM1 channel 1 – TIM2 overflow, TIM2 channel 0, TIM2 channel 1 Esporádicos » ICs – TIM1 channel 0, TIM1 channel 1 – TIM2 channel 0, TIM2 channel 1 » IRQ, KBI » SCI, SPI 424 SISTEMAS EMPOTRADOS RECURSOS EN EL 68HC08 Características generales de módulo TIMER Dispone de 2 “timer” independientes TIM1 y TIM2 Cada TIM dispone a su vez de 2 canales Para cada timer » Basado en un contador de 16 bits » Preescalado programable del reloj de entrada » 2 canales, para cada canal – input capture – output compare flanco subida, flanco bajada o cualquier cambio activar, desactivar o cambiar una patilla » generar interrupciones canal0, canal1 o desbordamiento contador Comparte el patillaje con el PTD 425 SISTEMAS EMPOTRADOS RECURSOS EN EL 68HC08 Diagrama de bloques de un TIM 426 SISTEMAS EMPOTRADOS RECURSOS EN EL 68HC08 Registro de estado y control TSC TOF indica que se ha producido overflow. » Borrado, leer TSC cuando TOF=1 y después escribir “0” en TOF TOIE habilitación de interrupciones » TOIE=1 interrupciones habilitadas » TOIE=0 interrupciones deshabilitadas TSTOP TRST parada del contador del TIM reset del TIM (contador y preescalado) 427 SISTEMAS EMPOTRADOS RECURSOS EN EL 68HC08 Función INPUT CAPTURE CHxIE, habilitación de interrupciones CHxF, Chanel x Flag » CHxF = 1 activo ha ocurrido un flanco » Borrado: lectura de TSCx con CHxF activo y después escritura de un 0 MSxB:MSxA 00 00 00 ELSxB:ELSxA 01 10 11 » CHxIE = 1 habilitadas » CHxIE = 0 deshabilitadas Configuración como input capture y selección del tipo de flanco Configuración CHx Input capture sólo flanco subida Input capture sólo flanco bajada Input capture cualquier flanco 428 SISTEMAS EMPOTRADOS RECURSOS EN EL 68HC08 Función OUTPUT COMPARE CHxIE, habilitación de interrupciones CHxF, Chanel x Flag » CHxF = 1 se ha producido la igualdad TCNT = TCHx » borrado: lectura de TSCx con CHxF activo y después escritura de un 0 MSxB:MSxA 01 01 01 01 ELSxB:ELSxA 00 01 10 11 » CHxIE = 1 habilitadas » CHxIE = 0 deshabilitadas Configuración como ouput compare y selección del tipo de flanco Configuración CHx OC sin actuar sobre pin Conmutar salida cuando expira Salida a "0" cuando expira Salida a "1" cuando expira 429 SISTEMAS EMPOTRADOS EJEMPLO DE IMPLEMENTACIÓN Sistema con cuatro tareas 3 tareas periódicas: P1, P2, P3 1 tarea esporádica: E Los datos de los procesos en ms: Proceso C T D S E 0.05 0.5 50 P1 1 5 2 P2 2 10 5 P3 1 15 15 Asignación de prioridades: primero el más urgente » Prio(E) > Prio(P1) > Prio(P2) > Prio(P3) SISTEMAS EMPOTRADOS EJEMPLO DE IMPLEMENTACIÓN Verificación de los plazos de respuesta: CE + I E = 0.05 + 0 ≤ DE = 0.5 ⎡D ⎤ C1 + ⎢ 1 ⎥CE = 1 + 0.05 ≤ D1 = 2 ⎢ PE ⎥ ⎡D ⎤ ⎡D ⎤ ⎡2⎤ ⎡ 2 ⎤ C2 + ⎢ 2 ⎥C1 + ⎢ 2 ⎥C E = 2 + ⎢ ⎥1 + ⎢ ⎥ 0.05 = 3.05 ≤ D2 = 5 ⎢ 5 ⎥ ⎢ 50 ⎥ ⎢ P1 ⎥ ⎢ PE ⎥ ⎡D ⎤ ⎡D ⎤ ⎡D ⎤ ⎡15 ⎤ ⎡15 ⎤ ⎡15 ⎤ C3 + ⎢ 3 ⎥C1 + ⎢ 3 ⎥C2 + ⎢ 3 ⎥C E = 1 + ⎢ ⎥1 + ⎢ ⎥ 2 + ⎢ ⎥ 0.05 = 8.05 ≤ D3 = 15 ⎢ 5 ⎥ ⎢10 ⎥ ⎢ 50 ⎥ ⎢ P1 ⎥ ⎢ P2 ⎥ ⎢ PE ⎥ 430 431 SISTEMAS EMPOTRADOS EJEMPLO DE IMPLEMENTACIÓN Por cada TIMER en un HC08, se dispone de 3 interrupciones periódicas: Source TIM1 channel 0 TIM1 channel 1 TIM1 overflow Flag CH0F CH1F TOF Mask CH0IE CH1IE TOIE INT Register Flag Priority VectorAddress IF3 3 $FFF6–$FFF7 IF4 4 $FFF4–$FFF5 IF5 5 $FFF2–$FFF3 Prio(CH0F) > Prio(CH1F) > Prio(TOF) TIMER1 channel0 P1 TIMER1 channel1 P2 TIMER1 overflow P3 Además se debe cumplir Periodo T1CNT > Periodos OCs Code Warrior Int Num 4 5 6 SISTEMAS EMPOTRADOS 432 EJEMPLO DE IMPLEMENTACIÓN Tareas periódicas P1 void interrupt 4 P1_Handler (void) { unsigned char old_CH1IE_1, old_TOIE_1 ; /* Reconocimiento de la interrupcion */ if (CH0F_1) CH0F_1=0; /* Salvar estado de interrupciones correspondientes a tareas menos prioritarias */ old_CH1IE_1=CH1IE_1; old_T0IE_1=TOIE_1; /* Se enmascaran las interrupciones pertenecientes a tareas menos prioritarias para evitar que le quiten el procesador a la tarea actual */ CH1IE_1=0; TOIE_1=0; /* Se permiten interrupciones encajadas para que puedan entrar en ejecucion de forma inmediata (expulsion) aquellas tareas de mas prioridad que la presente */ asm cli; /* Codigo de la tarea */ accion_P1 () ; /* Programacion nueva interrupcion*/ T1CH0 = (T1CH0 + T1)%moduloT1 ; /* Se restaura la habilitación de las interrupciones de tareas de menor prioridad que estuviesen habilitadas al producirse presente interrupcion */ asm sei; CH1IE_1 =old_CH1IE_1 ; TOIE_1= old_T0IE_1 ; } 433 SISTEMAS EMPOTRADOS EJEMPLO DE IMPLEMENTACIÓN P2 y P3 void interrupt 5 P2_Handler (void) { unsigned char old_TOIE_1 ; if (CH1F_1) CH1F_1=0; old_T0IE_1=TOIE_1; TOIE_1=0; asm cli; accion_P2 () ; T1CH1 = (T1CH1 + T2)%moduloT1 ; asm sei; TOIE_1= old_T0IE_1 ; } void interrupt 6 P3_Handler (void) { if (TOF_1) TOF_1=0; asm cli; accion_P3 () ; asm sei; } SISTEMAS EMPOTRADOS EJEMPLO DE IMPLEMENTACIÓN E void interrupt 15 E_Handler (void) { unsigned char old_CH0IE_1, old_CH1IE_1, old_TOIE_1 ; /* Reconocimiento de la interrupcion */ ACKK = 1 ; /* Salvar estado de interrupciones correspondientes a tareas menos prioritarias */ old_CH0IE_1=CH0IE_1; old_CH1IE_1=CH1IE_1; old_T0IE_1=TOIE_1; /* Se enmascaran las interrupciones pertenecientes a tareas menos prioritarias para evitar que le quiten el procesador a la tarea actual */ CH0IE_1=0; CH1IE_1=0; TOIE_1=0; /* Se permiten interrupciones encajadas para que puedan entrar en ejecucion de forma inmediata (expulsion) aquellas tareas de mas prioridad que la presente */ asm cli; /* Codigo de la tarea */ accion_E () ; /* Se restaura la habilitación de las interrupciones de tareas de menor prioridad que estuviesen habilitadas al producirse presente interrupcion */ asm sei; CH0IE_1 =old_CH0IE ; CH1IE_1 =old_CH1IE ; TOIE_1= old_T0IE_1 ; } 434 435 SISTEMAS EMPOTRADOS EJEMPLO DE IMPLEMENTACIÓN Inicialización unsigned int T1, T2, T3 ; void Init_System(void) { unsigned int milisegundo ; /* Borrar posibles banderines activados*/ if(CH0F_1) CH0F_1=0; if(CH1F_1) CH1F_1=0; if(TOF_1) TOF_1=0; ACKK = 1 ; /* Habilitar interrupciones*/ CH0IE_1=1; CH1IE_1=1; TOIE_1=1; INTKBIER |= 0x02 ; // PTA1 entrada interrupcion /* Parar el reloj y ponerlo a 0*/ TSTOP_1=1; TRST_1=1; /* Ajuste preescalado*/ /* PS2..0 = 000 => tick = 0.407 us */ PS2_1=0; PS1_1=0; PS0_1=0; milisegundo = 2457 ; //ticks /* T1 T2 T3 /* Desconcetar OC de Pines*/ ELS0B_1=0; ELS0A_1=0; ELS1B_1=0; ELS1A_1=0; Periodos de las tareas */ = 5 * milisegundo ; = 10 * milisegundo ; = 15 * milisegundo ; /* Fijar las próximas interrupciones */ T1CH0 = T1CH1 = T1MODH= T1MODL= /* Output Compare*/ MS0B_1=0; MS0A_1=1; MS1A_1=1; /* KBI, tarea esporadica E */ MODEK = 0 ; // Solo flanco de bajada PTAPUE |= 0x02 ; // PTA1 con pullup DDRA &= 0xFD ; // PTA1 entrada T1 ; T2 ; (unsigned char)(T3 >> 8) ; (unsigned char)(T3 & 0xFF) ; /* Reloj en marcha*/ TSTOP_1=0; void main (void) { Init_System () ; while (1) ; asm cli ; } } SISTEMAS EMPOTRADOS PROGRAMACIÓN DE UN EJECUTIVO Basado en un timer + Posibilidad de tarea de fondo void interrupt 6 Overflow_Handler (void) { rearme_interrupcion() ; if (marco_activo) desbordamiento_de_marco() ; else { marco_activo = 1 ; asm cli ; /* Interrupciones encajadas */ Ejecuta_un_marco() ; marco_activo = 0 ; } } void main(void) { void Ejecuta_un_marco(void) { unsigned int m = … ; static int marco = 0 ; int num_marcos = 2 ; Init_OC (m); while(1) marco = (marco % num_marcos)+1 ; procesos_acriticos() ; switch (marco) { } case 1: A; B; C; D1; break ; case 2: A; B; D2; break ; } } 436 437 SISTEMAS EMPOTRADOS SISTEMAS EMPOTRADOS NUCLEOS MULTITAREA 438 SISTEMAS EMPOTRADOS APLICACION MULTITAREA CON NÚCLEO Una aplicación multitarea está compuesta por: Un conjunto de tareas Un núcleo Las tareas compiten por Tiempo de ejecución (CPU) Memoria Otros recursos (timers, E/S, ...) El núcleo gestiona todos estos recursos y ofrece servicios a las tareas Reparto del tiempo de procesador Creación y destrucción de tareas Primitivas de comunicación y sincronización entre tareas Reloj y funciones basadas en el tiempo (delays, time outs) Captura todas las interrupciones y da servicio a algunas Gestión de memoria 439 SISTEMAS EMPOTRADOS APLICACION MULTITAREA CON NÚCLEO Núcleo = tarea de más prioridad El núcleo mantiene un conjunto de listas de tareas en diferentes estados El núcleo entra en la CPU Interrupciones Finales de ejecución preparado nuevo Comunicaciones, servicios espera activo ejecución terminado 440 SISTEMAS EMPOTRADOS APLICACION MULTITAREA Una tarea está compuesta por: Un código Una pila propia Variables globales El núcleo mantiene una estructura de datos por cada tarea: el TCB (“task control block”) Identificación de la tarea Punto de entrada Base de la pila Prioridad Contador de programa Puntero de pila Contexto » Registros de la CPU » Otras variables 441 SISTEMAS EMPOTRADOS Ejemplo: control de temperatura y nivel V » T: temperatura H T » H: nivel de líquido » C: ajuste del calefactor » V: ajuste de la válvula Periodo de muestreo deseado: » Temperatura: 5 s » Nivel: 1 s C 442 SISTEMAS EMPOTRADOS Ejemplo: control de temperatura y nivel void CONTROL_TEMP(void) { ... Time Siguiente ; Time Periodo = 5000 ; Siguiente = Clock () ; while(1) { MEDIR(&T) ; CALCULAR_ACCION(T,&C) ; GENERAR(C) ; Siguiente += Periodo ; delay_until (Siguiente) ; } } void CONTROL_NIVEL(void) { ... Time Siguiente ; Time Periodo = 5000 ; Siguiente = Clock () ; while(1) { MEDIR(&H) ; CALCULAR_ACCION(H,&V) ; GENERAR(V) ; Siguiente += Periodo ; delay_until (Siguiente) ; } } void main() { /* crear las tareas */ attr_init_T(&atributos); task_create(&thread_T, &atributos, (void *)CONTROL_TEMP, void); attr_init_H(&atributos); task_create(&thread_H, &atributos, (void *)CONTROL_NIVEL, void); } 443 SISTEMAS EMPOTRADOS NÚCLEOS Y PLANIFICACIÓN Los núcleos de sistemas empotrados utilizan siempre la planificación basada en prioridades: Planificación expulsiva / no expulsiva Estática SISTEMAS EMPOTRADOS 444 COMUNICACIÓN Y SINCRONIZACIÓN La dificultad de la programación concurrente estriba en las interacciones de los procesos: » Cooperación para un fin común » Competencia por el uso de recursos Son necesarias operaciones de comunicación y sincronización entre procesos: » Sincronización: cumplir restricciones en el orden en el que se ejecutan sus acciones » Comunicación: paso de información de un proceso a otro Hay dos formas de realizarlo: » Datos compartidos » Paso de mensajes 445 SISTEMAS EMPOTRADOS EXCLUSIÓN MUTUA Dos procesos compiten cuando comparten: un recurso una variable El acceso al recurso o a la variable debe ser en exclusión mutua. Sección crítica: secuencia de instrucciones que debe ejecutarse en exclusión mutua Mecanismos de sincronización ofrecidos por un núcleo Prioridades Semáforos Monitores SISTEMAS EMPOTRADOS SECCIÓN CRÍTICA NO EXPULSABLE Evitar expulsiones cuando se ejecuta una sección crítica Enmascarar interrupciones » No entra el núcleo, ni el reloj, ... Elevar al máximo la prioridad del código » Posibilidad de cambiar en tiempo de ejecución la prioridad de un tarea void Servicio (...) { Mask_all_Interrupts () ; Service_Code() ; /* seccion critica */ Unmask_all_Interrupts () ; return ; void Servicio (...) { } Nominal = Get_Priority () ; Set_Priority (HIGH) ; Service_Code() ; /* seccion critica */ Set_Priority (Nominal) ; return ; } 446 447 SISTEMAS EMPOTRADOS SEMÁFORO Es una variable que toma valores enteros no negativos (counting semaphore) S : semaphore := valor_inicial ; wait(S): si S > 0, S := S - 1 si no, suspender el proceso signal(S): si hay procesos esperando, pasar uno de ellos a preparado si no, S := S + 1 Las operaciones signal y wait son atómicas. Los semáforos tienen asociada una cola de procesos suspendidos en espera. Los semáforos son gestionados por el núcleo de ejecución 448 SISTEMAS EMPOTRADOS SINCRONIZACIÓN CONDICIONAL Sincronización condicional: una acción de un proceso sólo se puede ejecutar si otro proceso está en un cierto estado o si ha ejecutado ciertas acciones. Un semáforo binario inicializado a cero sirve para comunicar que se cumple la condición condicion: semaphore := 0 ; proceso P1; --espera principio repetir <parte 1a> Wait(condicion) ; <parte 1b> fin repetir; fin P1 ; proceso P2; -- avisa principio repetir <parte 2a> Signal(condicion) <parte 2b> fin repetir; fin P2 ; » La parte 1b no se ejecuta hasta que P2 avisa que se cumple la condición necesaria 449 SISTEMAS EMPOTRADOS SEMÁFORO El problema de hacer cuadernillos: programa GRAPAR_HOJAS ; S: semaphore := 0; proceso AMONTONAR; principio repetir coger una hoja de cada montón ; dejar el grupo en la mesa ; signal(S) ; hasta que se acaben las hojas; fin ; proceso GRAPAR ; principio repetir wait(S) ; tomar un grupo de la mesa ; graparlo ; hasta que se acaben los grupos; fin ; fin GRAPAR_HOJAS; 450 SISTEMAS EMPOTRADOS SEMÁFORO: EXCLUSIÓN MUTUA La exclusión mutua puede asegurarse con un semáforo binario, inicializado a uno » mutex (MUTual EXclusion) mutex: semaphore := 1 ; proceso P1; principio repetir Wait(mutex) ; <sección crítica> Signal(mutex) <sección no crítica> fin repetir; fin P1 ; proceso P2; principio repetir Wait(mutex) ; <sección crítica> Signal(mutex) <sección no crítica> fin repetir; fin P2 ; CUIDADO: si un proceso olvida liberar el mutex, el recurso queda bloqueado 451 SISTEMAS EMPOTRADOS MONITOR Es un módulo que encapsula las secciones críticas asociadas a una variable o un dispositivo físico en forma de procedimientos que son llamados por los procesos Sólo se puede acceder al elemento compartido a través de los procedimientos del monitor Las llamadas a los procedimientos del monitor se ejecutan en exclusión mutua. Monitor Contador; n: entero := 0 ; procedimiento incrementa; principio n:=n+1; fin; procedimiento escribe_borra; principio escribir n; n:=0; fin; fin Contador ; 452 SISTEMAS EMPOTRADOS MONITOR Hay lenguajes que soportan monitores » ej: protected de Ada 95 Pueden programarse mediante semáforos /* fichero contador.c */ #include “contador.h” #include <semaphore.h> /* variables privadas del monitor */ static semaphore mutex_contador ; static int n = 0 ; /* fichero contador.h */ void incrementa(void) ; void escribe_borra(void) ; void incrementa(void) { wait(mutex_contador) ; n:=n+1; signal(mutex_contador) ; } void escribe_borra(void) { wait(mutex_contador) ; escribir(n); n:=0; signal(mutex_contador) ; } 453 SISTEMAS EMPOTRADOS EXCL. MUTUA E INTERRUPCIONES Las rutinas de servicio de interrupciones (ISR) se ejecutan en concurrencia con el resto de procesos. Exclusión mutua => inhibir interrupciones static int n = 0 ; void rutina_interrupcion(void) { n:=n+1; } void escribe_borra(void) { inhibir_interrupcion() ; escribir(n); n:=0; activar_interrupcion() ; } 454 SISTEMAS EMPOTRADOS BUZÓN Comunicación asíncrona o por mensajes Un proceso P produce y envía una secuencia de datos a otro proceso C que los recibe y consume. Los datos son transmitidos en porciones discretas denominadas mensajes. Es posible que P produzca un mensaje cuando C no esté en disposición de recibirlo. Para evitar que P espere se introduce un área de almacenamiento de mensajes donde P puede colocar sus mensajes hasta que C los lea: BUZON o COLA DE MENSAJES P B C Es posible que un buzón tenga varios procesos emisores y varios receptores. 455 SISTEMAS EMPOTRADOS BUZÓN Manejo de buzones: B : buffer send(M,B) max of T receive(M,B) La política de manejo de un buzón puede ser: Si al enviar un mensaje el buzón está lleno: » el emisor espera hasta que haya espacio » el emisor espera, con un tiempo máximo » el mensaje se descarta » se descarta otro mensaje (p.ej. el más antiguo) Si al solicitar un mensaje el buzón está vacío: » el receptor espera hasta que haya mensaje » el receptor espera, con un tiempo máximo » se le indica que no hay mensaje y puede continuar 456 SISTEMAS EMPOTRADOS NÚCLEOS PARA µC y DSPs TMS320F2812 » DSP/BIOS OS (Texas Instruments) 68HC08 » CMX-Tiny+ (CMX Systems) – Compatible con CodeWarrior » ProOSEK (OSE Systems)