Está en la página 1de 56

Sistemas de Tiempo Real

Universidad Nacional de La Rioja


Ing. Ricardo F. Maldonado
(prof. Asociado - transitorio)

2023

“1983-2023 40 años de democracia”


Sistemas de Tiempo Real

Ingeniería Mecatrónica
Martes 20:00 a 22:00
https://meet.google.com/qbd-rvjd-wqx

https://t.me/Tiempo_Real_UNLaR

23/04/23 Ing. Ricardo F. Maldonado 2


Unidad N.º 2

Generalidad de la Arquitectura de Hardware


Arquitectura. Componentes de un STR. Relación entre los componentes.
Característica especiales de las Unidades de Procesamiento. Tipos de
datos. Modalidad de ejecución. Lectura y escritura de memoria.
Interacción con el medio. Lectura y escritura de puerto. Dispositivo de
I/O. Interrupciones. Definición y proceso de atención. Interrupciones
enmascarables. Temporizadores. Técnica de whatchdog. Buses.
Sincronismos. Características. Arbitrajes. Fundamentos de protocolos de
comunicación. Señales en la comunicación. Ejemplos de protocolos
paralelos y serie.

23/04/23 Ing. Ricardo F. Maldonado 3


Ejemplo

Actividades que debe realizar la MCU de un automovil


● Control de velocidad C=4ms T=20ms D=5ms
● Control de frenado C=10ms T=40ms D=40ms
● Control de combustible C=40ms T=80ms D=80ms
● Otro – no crítico C=10ms T=40ms

C=tiempo de computo (peor caso),


T=Periodo de ejecución,
D=Plazo de respuesta

23/03/21 Ing. Ricardo F. Maldonado 4


Ejemplo
4 10 6 4

velocidad frenado combustible velocidad


16 4 10 6

combustible velocidad frenado combustible

4 12 10

velocidad combustible otro

23/03/21 Ing. Ricardo F. Maldonado 5


Arquitectura

Para nuestros fines, vamos a entender


como arquitectura del hardware a:

todo el conocimiento que sea útil
abordar su programación.

todas aquellas características que
podrían contribuir a determinar el tiempo
de ejecución.

23/03/21 Ing. Ricardo F. Maldonado 6


Arquitectura

23/03/21 Ing. Ricardo F. Maldonado 7


Componentes de un STR típico
Interfaz
Sensor RTCk Algoritmos Interfaz
de Entrada
de Entrada
Actuador
RTCk de Control Interfaz PROCESO
deInterfaz
Transductor
Salida STR
de Salida

Convertidores Gestión de
Controlador Registros

RTCk DB
Display DB Presentación
de Datos
Consola
Base de datos Módulo de
Interacción
Comunicación Consola Display
Consola Display

23/03/21 Ing. Ricardo F. Maldonado 8


Relación entre los componentes
La comunicación entre la unidad
de procesamiento se da
mediante 3 buses. Datos,
Direcciones y Control.

Para esta asignatura


consideraremos una única
unidad de procesamiento y un
mapeo de dispositivos de I/O y
un mapeo de memoria (código,
datos y stack).

Cada acceso consume tiempo


y las velocidades de los
dispositivos es menor al de la
CPU

23/03/21 Ing. Ricardo F. Maldonado 9


Modelo de la arquitectura

Las I/O son latcheadas.

Se debe atender la lectura y la


escritura de estas señales (evitar
los falsos positivos).

En general, la lógica digital puede


activarse con niveles (alto o bajo) o
a partir de flancos (ascendentes o
descendentes)

Cada operación consume tiempo


y poseen velocidades distintas.

23/03/21 Ing. Ricardo F. Maldonado 10


Modelo de la arquitectura

Ademas de los registros de la


ALU, hay varios registros
utilizados durante la ejecución de
un programa, que tienen
funciones definidas.

Otras unidades que son de


interés como la de control de
interrupciones, registros y
señales del bus de control que
complementan a esas unidades

Cada operación utiliza


diferentes unidades con
tiempos diferentes

23/03/21 Ing. Ricardo F. Maldonado 11


Lectura – Escritura de Memoria

El acceso a memoria puede ser de lectura (R) o escritura (W) y en


arquitecturas RISC está asociada a instrucciones LOAD y STRORE

23/03/21 Ing. Ricardo F. Maldonado 12


Mapeo de direccionamiento

La memoria se organiza lógicamente


en secciones en las cuales se le asigna
una función.
Cada sección tiene una dirección base
u una final. Bloque direccionable

Esta organización tiene el nombre de


Mapa de Memoria y forma parte de la
definición de una arquitectura

El acceso a RAM ocupa siempre el


mismo tiempo

23/03/21 Ing. Ricardo F. Maldonado 13


Acceso de I/O

Entrada/Salida Programada.
Utilizan instrucciones de movimiento de datos para transferir hacia y
desde la CPU. Una instrucción IN / OUT usa un registro que está
especifada en el código de instrucción.
Entrada/salida mapeada en memoria
mecanismo de transferencia de datos que no requiere el uso de
instrucciones especiales de E/S de la CPU. En la E/S asignada a la
memoria, la ubicaciones aparecen como puertos de E/S virtuales.

Memoria de acceso directo


En DMA, el acceso a la memoria de la computadora se otorga a otros
dispositivos en el sistema sin intervención de la CPU.
Acelera el intercambio de datos

23/03/21 Ing. Ricardo F. Maldonado 14


Dispositivo periférico típico

Address bus
Electrónica de
selección control del
BUS
Señales del
Data bus datos periférico
control protocolo
IRQ
estado
Control Selec
Electrónica de
bus AKC control del
Clk periférico

23/04/23 Ing. Ricardo F. Maldonado 15


Ejemplo - Mapa de bits


A los bits que conforman un registro se les asocia un función o descripción
de un dispositivos con el cual se relaciona.

Los mapas de bits pueden representar estados del dispositivo, o indicar
cual será su próximo estado como determinar si un pin es una entrada o
una salida.

23/04/23 Ing. Ricardo F. Maldonado 16


Microprocesadores

Algunos STR pueden implementarse en mainframe:
cuando requiere gran potencia de CPU con
importantes volúmenes de datos y no necesite ser
móvil (control de tráfico aéreo).

Un microcontrolador es un dispositivo digital
programable que integra la memoria de instrucciones
y datos en un mismo chips e incorpora control directo
(instrucciones) de hardware complementario como
puertos, dispositivos de comunicación o
preprocesamiento de señales.

El microcontrolador puede recibir información directa
de los dispositivos y controlar directamente las
señales de salida externas.

23/04/23 Ing. Ricardo F. Maldonado 17


Intercambio de datos


IRL pin de solicitud de Interrupciones.
Cuando se activa la CPU va a ejecutar la
rutina de atención de interrupciones.

Si la CPU quiere leer o escribir datos en el
dispositivo preriférico, primero lo direcciona
(activa el bus de dirección).

Se decodifica la dirección seleccionando al
periférico de interés.

Luego realiza la operación de lectura o
escritura del bus de datos.

23/04/23 Ing. Ricardo F. Maldonado 18


Interrupciones

Una interrupción es una señal de hardware que inicia un evento. Se pueden


iniciar interrupciones por dispositivos externos, o internamente si la CPU
tiene esta capacidad (execpciones).
Excepciones → Interrupciones (externas) o trampas (internas)
Las instrucciones atómicas útiles:

EPI para Eneable / Diseable interrupciones

DPI para aceptar o no aceptar interrupciones
para escribir y leer la pila (stack)

pop guarda en la pila

push lee y extrae desde la pila
23/04/23 Ing. Ricardo F. Maldonado 19
Interrupciones

Al producirse la señal de interrupción



Completa la instrucción en ejecución y desactiva las interrupciones

Guarda en el PC la ubicación de retorno y el registro de estado (SR)

Carga en el PC la dirección del controlador de interrupciones

Ejecuta el código (controlador de interrupción).

Restituye el CP con la ubicación de retorno y los registros

Habilita las interrupciones y reanuda la secuencia de ejecución.
¿cuanto tiempo ocupa la atención de una interrupción?

23/04/23 Ing. Ricardo F. Maldonado 20


Interrupciones

Paso 1: instrucción que se


está ejecutando
Paso 2: guarda el
contenido del programa
contador de la ubicación
de retorno de interrupción.
Paso 3: carga la dirección
contenida en el controlador
de interrupciones
ubicación en el contador
de programas.

23/04/23 Ing. Ricardo F. Maldonado 21


Interrupciones → enable

Un falso positivo, puede ser


producido por la ausencia de la
manipulación de la habilitación
de interrupciones.

Además hay veces que en el


software se debe imponer la
prioridad de un programa o
sección de él y su ejecución no
debe ser interrumpida.

23/04/23 Ing. Ricardo F. Maldonado 22


Timers

Es un registro que se auto incrementa /decrementa a partir de un valor seteado


y cuya valocidad también puede ser seteada.

Al llegar al overflow, interrumpe a la CPU para ejecutar una rutina

23/04/23 Ing. Ricardo F. Maldonado 23


Watchdog Timers - WDT

Es un registro que se auto


incrementa /decrementa y que debe
inicializarse (borrarse)
periodicamente por código.

En caso de llegar a un valor final


(overflow), interrumpe a la CPU

Los WDT se utilizan para garantizar que dispositivos reciban servicio con
cierta regularidad e intervalos o que ciertos procesos se ejecuten de
acuerdo a una tasa definida o que la CPU tenga continuidad en su
funcionamiento.

23/04/23 Ing. Ricardo F. Maldonado 24


Homeworks

¿Como se puede implementar un


sistema que administre prioridad
en las interrupciones?

Ayuda:
Piense en lo visto en FED

23/04/23 Ing. Ricardo F. Maldonado 25


Buses

Un bus es un conjunto de líneas y señales compartidas entre diferentes


dispositivos sobre las que se implementa la comunicación entre ellos.
El dispositivo que inicia y controla la transferencia se conoce como
master del bus y el que recepciona esa transferencia se conoce como
slave.
Las funciones de master y slave pueden ser dinámicos Por ejemplo
DMA → CPU y CPU → DMA
Es necesario un método de arbitraje (centralizado o distribuido) para
garantizar el orden, acceso y prioridad en ocupar el bus.

23/04/23 Ing. Ricardo F. Maldonado 26


Buses - Características


Reduce la ruta para la comunicación (comparte canal)

Permite transportar información en forma simultánea [bits].

Es un proceso esencialmente síncrono [Hertz]

Se envían o reciben señales en cada ciclo/flancos.

La velocidad de transferencia de datos (máxima) [bps]

Permite definen puertos → conexión de hardware

23/04/23 Ing. Ricardo F. Maldonado 27


Sub Buses - tipos
Según su funcionalidad:

El bus de direcciones (memoria) → unidireccional. Selecciona el
dispositivo que será el slave

El bus de datos → bidireccional. Transportan datos de la
transferencia. Pueden ser independiente o multiplexadas en el
tiempo.

El bus de control (bus de comando)→ bidireccional. Marcan el
orden temporal de las señales del bus y controlan el intercambio.
– Líneas de arbitraje: establecen la prioridad entre peticiones
de acceso al bus. Pueden ser de petición, cesión u
ocupación del bus

23/04/23 Ing. Ricardo F. Maldonado 28


Sub Buses - tipos

Unidireccional
Emisor simple

Unidireccional
Emisor múltiple

Bidireccional

23/04/23 Ing. Ricardo F. Maldonado 29


Sub Buses - tipos

Los buses principales



bus interno (bus frontal o FSB)
procesador → RAM

bus de expansión (entrada/salida)
USB, puerto serial o paralelo, tarjetas
insertadas en conectores PCI, discos
duros, unidades de CD-ROM y CD-RW,
etc.

23/04/23 Ing. Ricardo F. Maldonado 30


Buses síncronos

En los buses síncronos existe un ck gobierna las actividades del bus, las
cuales tienen lugar en un número entero de ciclos de reloj.

La transferencia de datos se
produce en el flancos del ck.
En cada ciclo hay una
operación con memoria.
Los buses síncronos son
rápidos pero no tienen
flexibilidad para dispositivos
con otras velocidades.

23/04/23 Ing. Ricardo F. Maldonado 31


Buses asíncronos

Utilizan un protocolo tipo handshaking entre el master y el slave.

uP

RAM uP

RAM

23/04/23 Ing. Ricardo F. Maldonado 32


Buses semiasíncronos

Un ck gobierna las transferencias y una señal wait del slave permite


transferencias de más de un ciclo. Los dispositivos rápidos operarán como
en bus síncrono y los lentos en asíncrono.

23/04/23 Ing. Ricardo F. Maldonado 33


Arbitraje

El arbitraje, es un protocolo que permite la organización el uso compartido


del bus, estableciendo prioridades y garantizando el acceso al bus.
Tipos de arbitraje:

los centralizados: donde una unidad se encarga de gestionar el uso
del bus y puede ser implementado en un circuito independiente o en
otro con otra funcionalidad.

los distribuidos: donde no hay una unidad gestora de bus sino que
se realiza en forma distribuida entre los dispositivos.

23/04/23 Ing. Ricardo F. Maldonado 34


Arbitraje - daisy chaining de dos señales

El master que quiere acceder al bus activa la petición y los demás masters la
propagan hasta el árbitro. El árbitro activa la señal la concesión que es propagada
hasta el master con la petición pendiente pare tomar el control. Si un master recibe
una señal de petición mientras está accediendo al bus, bloquea su propagación al
árbitro hasta que finalice la utilización del bus..

23/04/23 Ing. Ricardo F. Maldonado 35


Arbitraje - daisy chaining de dos señales

Un master activa la línea de petición común a todos los dispositivos. Si


petición y ocupación está desactivada el árbitro activa la concesión que
se transmite hasta el master que peticionó que toma el bus activando
ocupación.

23/04/23 Ing. Ricardo F. Maldonado 36


Arbitraje - daisy chaining de dos señales

El procedimiento es igual al descripto anteriormente solo que cuando un


master ocupa el bus y un segundo lo necesita, activa la linea de
reconocimiento. En ese punto el árbitro se inhibe y cuando el dispositivo
que estaba ocupando el bus desactiva la linea de ocupación, quien toma
el bus es quién había activado reconocimiento.

23/04/23 Ing. Ricardo F. Maldonado 37


Arbitraje – Por polling

El árbitro tiene la posibilidad de seleccionar el master, una vez detectada


la petición y un conjunto de lineas de concesión que seleccionan al
dispositivo.

23/04/23 Ing. Ricardo F. Maldonado 38


Arbitraje – por señales independientes

El árbitro tiene el control total sobre los dispositivos y a partir de las


señales de petición de estos, habilita los de concesión de manera
independiente

23/04/23 Ing. Ricardo F. Maldonado 39


Arbitraje – distribuidos

El Arbitro_i concede el bus al


master M_i activando G_i solo en
caso que:
M_i haya activado su línea de
petición de bus R_i
La línea de ocupación está
desactivada.
La línea de entrada de prioridad
P_(i-1) está activada
Si el master M_i no ha activado su
línea de petición de bus R_i, el
Arbitro_i activa la línea de salida
de prioridad P_i.

23/04/23 Ing. Ricardo F. Maldonado 40


Comunicación Paralelo


La velocidad a la que se envían datos en forma serial se denomina
velocidad en baudios que es expresada bits por segundo (solo en
transmisión de dos niveles).

23/04/23 Ing. Ricardo F. Maldonado 41


Comunicación Paralelo


El protocolo Centronics (en desuso) es protocolo en para transmisión de
datos en paralelo que se programa accediendo a diferentes tipos de registros

Los registros son de datos, estado y
control.

Esos registros son accedidos por el
software para controlar o conocer el
estado del dispositivo.

23/04/23 Ing. Ricardo F. Maldonado 42


Comunicación Paralelo

Strobe: Si está bajo más de 0.5
µs, habilita al dispositivo para
recibir los datos.

Ack: pulso bajo de ~11µs indica
que se han recibido el dato y
que el dispositivo puede recibir.

Busy: dispositivo ocupado.

PaperEnd: el dispositivo no
puede funcionar

SelectIn: selecciona al ●
Error: Error de dispositivo
dispositivo

Init: pulso en bajo > 50 µs para reiniciar el dispositivo

AutoFeed: indica al dispositivo
que accione

Select: en bajo selecciona al disposotivo

23/04/23 Ing. Ricardo F. Maldonado 43


Comunicación Paralelo


El protocolo se “sincroniza” con las señales qie se muestra en la figura.

La comunicación ocurre entre los dispositivos siempre que las otras
señales no se encuentren activas
23/04/23 Ing. Ricardo F. Maldonado 44
Comunicación Serie


El protocolo RS-232 puede ser usado para protocolos RS-485, Profibus,
ModBus RTU, DeviceNet y Ethernet IP (el estándar RS-232C)

Los ‘datos’ son impulsos de tensión positivos (+) y
negativos (-) relativos a una referencia de tierra.

Un grupo de pulsos son cronometrados por el
dispositivo receptor y decodificados en lo que los
ajustes de hardware consideran paquetes de bits
de datos.

23/04/23 Ing. Ricardo F. Maldonado 45


Comunicación Serie


Diferentes codificación en tensiones permitidos en el protocolo

23/04/23 Ing. Ricardo F. Maldonado 46


Comunicación Serie


Diferentes codificación en tensiones permitidos en el protocolo

23/04/23 Ing. Ricardo F. Maldonado 47


Homeworks - calificable
IEEE 1394 (firewire) es el estándar de bus externo que admite tasas de transferencia de datos de
hasta 400 megabits por segundo (Mbps) (en 1394a) y 800 Mbps (en 1394b). Se define también el
puerto 1394 para conectarse 63 dispositivos externos de 100, 200 y 400 Mbps ypor lo que puede
admitir múltiples velocidades en un solo bus. También el estándar admite la conexión en cadena
y la ramificación de forma libre para implementaciones punto a punto; conexiónes que pueden
realizarse en hot. FireWire admite dos tipos de transferencia de datos: asíncrona para
aplicaciones mapeadas, cargadas y almacenadas en la memoria de la computadora; y la
isócrona para transporte de datos a una velocidad predeterminada garantizada. Esto lo hace
ideal para dispositivos de tiempo real.

Busque información técnica en la web y confeccione un informe (técnico)


que describa la señalización para la modalidad asíncrona o isócrona.
Exponga en no mas de 15min, esta tarea antes de finalizar el
cuatrimestre.

23/04/23 Ing. Ricardo F. Maldonado 48



Consultas

Comentarios

Preguntas

23/04/23 Ing. Ricardo F. Maldonado 49


Eventos y estados en el software

Los eventos guían el funcionamiento y se encuentra un estado.

Un evento se implementa con una interrupción o por bifurcación.

Evento de software: es cualquier suceso que saque al contador de
programa de la secuencia de flujo normal.

Tiempo de liberación: es el momento en que un estado ha finalizado por
la ocurrencia de un evento.

Instancia de una tarea: ocurre cuando está lista para ejecutarse llega un
evento que la activa

23/04/23 Ing. Ricardo F. Maldonado 50


Eventos y estados en el software
Los eventos pueden ser caracterizados como:

síncronos o asíncronoes → según su planificación

periódicos o aperiódicos → según el tiempo en que se producen

esporádicos o regulares → según la probabilidad de ocurrencia

dependientes o independientes → según su asociabilidad

Evento Evento
Tarea
Tarea

23/04/23 Ing. Ricardo F. Maldonado 51


Conclusión

Uno de los objetivos en el análisis y resolución de un STR es el de


predecir el instante en que se abordará un estado a partir de tener el
conocimiento del estado precedente y de las entradas
Determinismo de resultados Evento
Determinismo de eventos Estado
Estadonn
Determinismo temporal

Estado
Estadon+1
n+1

23/04/23 Ing. Ricardo F. Maldonado 52


Homeworks
Para los sistemas citados enumere algunos eventos posibles.
Califíquelos según planificación, tiempo y ocurrencia. Piense los tiempos de
respuesta razonables de algún estado:

monitoreo de una caldera

reserva de aerolíneas

embotellado de un fluido

control de semáforos

23/04/23 Ing. Ricardo F. Maldonado 53


Algoritmos de planificación de tiempo real
Los algoritmos más comunes son:
Tasa Monotónica (RM, Rate Monotonic): este algoritmo asigna prioridades a las tareas en función de su tasa, es decir, su
frecuencia de ejecución. Las tareas con tasas más altas tienen prioridades más altas. Es un algoritmo óptimo para sistemas en
los que todas las tareas son periódicas y tienen plazos de ejecución iguales a sus periodos.
Asignación de Prioridad Fija (FP, Fixed Priority): en este algoritmo, se asigna una prioridad fija a cada tarea. Las tareas con
prioridades más altas se ejecutan antes que las tareas con prioridades más bajas. Es un algoritmo flexible y fácil de
implementar, pero no siempre garantiza la satisfacción de los plazos.
Planificación por lotería (Lottery Scheduling): este algoritmo asigna a cada tarea un número de lotería, y luego se realizan
sorteos para decidir qué tarea se ejecutará a continuación. Las tareas con más loterías tienen más posibilidades de ser
seleccionadas. Es un algoritmo justo y flexible, pero puede ser costoso en términos de cómputo.
Planificación de Colas Múltiples (MQ, Multi-Queue): este algoritmo divide las tareas en varias colas según su prioridad. Las
tareas con mayor prioridad se ejecutan primero, y las tareas de una cola solo se ejecutan si no hay tareas pendientes en las
colas de prioridad más alta. Es un algoritmo flexible y escalable, pero puede ser difícil de implementar.
Planificación por compensación de tiempo (EDF, Earliest Deadline First): en este algoritmo, se asigna una prioridad a cada tarea
según su plazo de ejecución, es decir, la hora límite para su finalización. Las tareas con plazos de ejecución más cercanos
tienen prioridades más altas. Es un algoritmo óptimo para sistemas en los que las tareas pueden tener plazos de ejecución
diferentes y no son necesariamente periódicas.
Cada algoritmo tiene sus propias ventajas y desventajas, y la elección del algoritmo dependerá de las necesidades y requisitos
específicos del sistema en cuestión.

23/04/23 Ing. Ricardo F. Maldonado 54


Asignación de Prioridad Fija (Fixed Priority)

un algoritmo de planificación de tiempo real en el que a cada tarea se le asigna una prioridad fija. Las tareas
con prioridades más altas se ejecutan antes que las tareas con prioridades más bajas.
El algoritmo FP funciona de la siguiente manera:
A cada tarea se le asigna una prioridad fija en función de su importancia relativa para el sistema.
Las tareas se planifican en orden de prioridad. La tarea de mayor prioridad se ejecuta primero, seguida de la
segunda tarea de mayor prioridad, y así sucesivamente.
Si una tarea de prioridad más alta llega mientras se está ejecutando una tarea de prioridad más baja, se
suspende la tarea de prioridad más baja y se ejecuta la tarea de prioridad más alta.
Si una tarea no se completa antes de su plazo de ejecución, se considera que se ha producido un fallo y se
toman medidas correctivas.
El algoritmo FP es flexible y fácil de implementar, pero no siempre garantiza la satisfacción de los plazos. Si se
asignan prioridades de manera incorrecta, una tarea de baja prioridad puede bloquear una tarea de alta
prioridad y causar que se incumplan los plazos. Además, el algoritmo FP no es óptimo para sistemas en los que
las tareas son periódicas y tienen plazos de ejecución iguales a sus periodos. En tales casos, se prefiere el
algoritmo de Tasa Monotónica (RM, Rate Monotonic), que asigna prioridades en función de la frecuencia de
ejecución de las tareas.

23/04/23 Ing. Ricardo F. Maldonado 55


Homeworks - calificable
El algoritmo de tasa monotónica (RM, por sus siglas en inglés de Rate Monotonic) es un algoritmo de
planificación de tiempo real para sistemas embebidos en los que se asigna una prioridad a cada tarea
según su frecuencia de ejecución.
El algoritmo RM funciona de la siguiente manera:
Se asigna una prioridad a cada tarea según su período, es decir, la frecuencia con la que debe ejecutarse.
Las tareas con periodos más cortos reciben prioridades más altas.
Las tareas se planifican en orden de prioridad. La tarea de mayor prioridad se ejecuta primero, seguida de
la segunda tarea de mayor prioridad, y así sucesivamente.
Si dos o más tareas tienen la misma prioridad, se utiliza la política de "desempate" de asignar la tarea con el
plazo de ejecución más cercano.
Si una tarea no se completa antes de su siguiente período de ejecución, se considera que se ha producido
un fallo y se toman medidas correctivas.
El algoritmo RM es óptimo para sistemas en los que todas las tareas son periódicas y tienen plazos de
ejecución iguales a sus periodos. Si se cumplen estas condiciones, el algoritmo RM garantiza que todas las
tareas se completen antes de sus plazos de ejecución y, por lo tanto, garantiza la satisfacción de los plazos.

23/04/23 Ing. Ricardo F. Maldonado 56

También podría gustarte