diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 8b6bbe7..316b43e 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -4,16 +4,16 @@ "type": "split", "children": [ { - "id": "af7b9ed910c8130c", + "id": "e000b54db04ae812", "type": "tabs", "children": [ { - "id": "586fa53a61c93a2c", + "id": "3eee65efd232b15f", "type": "leaf", "state": { "type": "markdown", "state": { - "file": "TERCERO/ATR2/Teoria_2425.md", + "file": "TERCERO/SETR1/Teoria_2425.md", "mode": "source", "source": false }, @@ -78,7 +78,8 @@ } ], "direction": "horizontal", - "width": 300 + "width": 300, + "collapsed": true }, "right": { "id": "44cf06183e1c1c7d", @@ -161,7 +162,8 @@ } ], "direction": "horizontal", - "width": 367.5 + "width": 367.5, + "collapsed": true }, "left-ribbon": { "hiddenItems": { @@ -175,29 +177,28 @@ "obsidian-git:Open Git source control": false } }, - "active": "586fa53a61c93a2c", + "active": "3eee65efd232b15f", "lastOpenFiles": [ - "TERCERO/ATR2/Pasted image 20250510225115.png", - "TERCERO/ATR2/Teoria_2425.md", - "TERCERO/ATR2/Pasted image 20250510225113.png", - "TERCERO/ATR2/Pasted image 20250510224952.png", - "TERCERO/ATR2/Pasted image 20250510224703.png", - "TERCERO/ATR2/Pasted image 20250510221130.png", - "TERCERO/ATR2/Pasted image 20250510222503.png", - "TERCERO/ATR2/Pasted image 20250510222038.png", - "TERCERO/ATR2/Pasted image 20250510222011.png", - "TERCERO/ATR2/Pasted image 20250510221553.png", - "TERCERO/ATR2/Pasted image 20250510221309.png", - "Untitled.md", + "Pasted image 20250515120558.png", + "Pasted image 20250515115411.png", + "Pasted image 20250515115243.png", + "Pasted image 20250515114753.png", + "Pasted image 20250515113822.png", + "Pasted image 20250515113807.png", + "Pasted image 20250515113537.png", + "Pasted image 20250515113438.png", + "Pasted image 20250515105628.png", + "Pasted image 20250515105326.png", + "Pasted image 20250515104852.png", "TERCERO/IA/Teoría_2425.md", - "TERCERO/SETR1/Teoria_2425.md", + "TERCERO/DAD/Teoria_2425.md", + "TERCERO/ATR2/Teoria_2425.md", "TERCERO/PI/Teoria_2425.md", - "TERCERO/PI/Presentación 24-25.md", - "TERCERO/PI", - "SEGUNDO/AC/Teoría_2324.md", + "TERCERO/SETR1/Teoria_2425.md", + "Untitled.md", "Untitled 1.md", "SEGUNDO/RC/Teoría_2324.md", - "TERCERO/DAD/Teoria_2425.md", + "SEGUNDO/AC/Teoría_2324.md", "TERCERO/ATR1/Teoría_2425.md", "conflict-files-obsidian-git.md", "TERCERO/DAD/images", @@ -205,8 +206,10 @@ "TERCERO/ATR2", "Untitled", "TERCERO/DAD", + "TERCERO/PI/Presentación 24-25.md", "TERCERO/SETR1/Presentación 24-25.md", "TERCERO/SETR1", + "TERCERO/PI", "TERCERO/SPD/Teoría_2425.md", "TERCERO/SS/SS 24-25.md", "TERCERO/ATR1/Resolución 1 Parcial ATR1.md", diff --git a/Pasted image 20250515104540.png b/Pasted image 20250515104540.png new file mode 100644 index 0000000..06b6b8b Binary files /dev/null and b/Pasted image 20250515104540.png differ diff --git a/Pasted image 20250515104751.png b/Pasted image 20250515104751.png new file mode 100644 index 0000000..2317b47 Binary files /dev/null and b/Pasted image 20250515104751.png differ diff --git a/Pasted image 20250515104812.png b/Pasted image 20250515104812.png new file mode 100644 index 0000000..0328b06 Binary files /dev/null and b/Pasted image 20250515104812.png differ diff --git a/Pasted image 20250515104852.png b/Pasted image 20250515104852.png new file mode 100644 index 0000000..fcc61de Binary files /dev/null and b/Pasted image 20250515104852.png differ diff --git a/Pasted image 20250515105326.png b/Pasted image 20250515105326.png new file mode 100644 index 0000000..2386ccb Binary files /dev/null and b/Pasted image 20250515105326.png differ diff --git a/Pasted image 20250515105628.png b/Pasted image 20250515105628.png new file mode 100644 index 0000000..e19e9b6 Binary files /dev/null and b/Pasted image 20250515105628.png differ diff --git a/Pasted image 20250515113438.png b/Pasted image 20250515113438.png new file mode 100644 index 0000000..de13b83 Binary files /dev/null and b/Pasted image 20250515113438.png differ diff --git a/Pasted image 20250515113537.png b/Pasted image 20250515113537.png new file mode 100644 index 0000000..70e1814 Binary files /dev/null and b/Pasted image 20250515113537.png differ diff --git a/Pasted image 20250515113807.png b/Pasted image 20250515113807.png new file mode 100644 index 0000000..c2ffbc3 Binary files /dev/null and b/Pasted image 20250515113807.png differ diff --git a/Pasted image 20250515113822.png b/Pasted image 20250515113822.png new file mode 100644 index 0000000..f850d87 Binary files /dev/null and b/Pasted image 20250515113822.png differ diff --git a/Pasted image 20250515114753.png b/Pasted image 20250515114753.png new file mode 100644 index 0000000..96e6a03 Binary files /dev/null and b/Pasted image 20250515114753.png differ diff --git a/Pasted image 20250515115243.png b/Pasted image 20250515115243.png new file mode 100644 index 0000000..ac068a4 Binary files /dev/null and b/Pasted image 20250515115243.png differ diff --git a/Pasted image 20250515115411.png b/Pasted image 20250515115411.png new file mode 100644 index 0000000..077eb2e Binary files /dev/null and b/Pasted image 20250515115411.png differ diff --git a/Pasted image 20250515120558.png b/Pasted image 20250515120558.png new file mode 100644 index 0000000..077eb2e Binary files /dev/null and b/Pasted image 20250515120558.png differ diff --git a/TERCERO/SETR1/Teoria_2425.md b/TERCERO/SETR1/Teoria_2425.md index a4701a1..e3265a3 100644 --- a/TERCERO/SETR1/Teoria_2425.md +++ b/TERCERO/SETR1/Teoria_2425.md @@ -415,4 +415,109 @@ Principales (importantes para el examen): - Interface - Endpoint -# 3300 VS 3333 en CLK: ruido frecuencia 1KHz por ruido porque los 23 datos anteriores se transfieren bien pero el ultimo da fallo al estar los tiempos tan apurados, 3333 se escucha mejor +#### 3300 VS 3333 en CLK: ruido frecuencia 1KHz por ruido porque los 23 datos anteriores se transfieren bien pero el ultimo da fallo al estar los tiempos tan apurados, 3333 se escucha mejor + +# TEMA 6: Tolerancia a fallos +Los mecanismos de tolerancia a fallos integrados en los μC suelen ser bastante simples. Los problemas que pueden detectar, y en algún caso, resolver. +- Fallos de alimentación +- Errores de código: _stack overflow_ (WDT) +- Errores hardware: conexión externa interrumpida (WDT) +- Corrupción memoria (WDT) +- Fallo reloj (monitor de CLK) +Los principales mecanismos son: +- Watch Dog Timer (WDT) (Reset) +- Monitores de reloj (Reset) +- Instrucción no implementada (sin return) +- Memoria no implementada (Int/Reset) +## 1. Reset encendido y fallos alimentación +La línea RST se conecta a un circuito RC para que la línea de RST se retenga hasta que $V_{CC}$ alcanza el mínimo valor de tensión para que el μC opere correctamente. +![[Pasted image 20250515114753.png]] +La solución del circuito RC en la línea de RST tiene a su vez dos fallos: +- Los fallos momentáneos de alimentación +- Momento de apagado +![[Pasted image 20250515115243.png]] +### Solución: monitores de reset y alimentación +![[Pasted image 20250515115411.png]]a +## 2. Watch Dog Timer +En los μC es un mecanismo que mezcla software con un elemento hardware para detectar fallos: +- Se basa en que el código en los SE es siempre cíclico y periódico +- Si se tiene bien caracterizado ese tiempo de repetición (Tr) podemos decir que si en alguna ocasión se supera es porque el sistema se ha colgado +- El WDT se programa para que produzca un Reset cada cierto tiempo Twdt > Tr +La clave está en limpiar en el código el WDT en varios puntos, para que nunca llegue a Reset. Si el código deja de operar como debe, no se limpiará y habrá un Reset. El Twdt tiene que estar ajustado, ya que si es muy corto, habrá resets innecesarios, y si es muy largo, se desperdicia tiempo colgado. + +En el STM32, se usa un IWDT (Independent Clock WDT) para que si se cuelga el CLK del sistema, pueda dar un Reset. Y también se usa un WDWT (Window WDT), que marca una ventana temporal en la que se puede limpiar el timer, fuera de esa ventana no. +# TEMA 7: FreeRTOS +## 1. Introducción +![[Pasted image 20250515104540.png]] +- **Tiempo real blando:** Se busca que el tiempo medio de respuesta sea menor que un tiempo predefinido. +- **Tiempo real duro:** Se busca cumplir los plazos de respuesta estrictamento. +### Planificación manual para tiempo real +![[Pasted image 20250515104751.png]] +![[Pasted image 20250515104812.png]] +Este método es más complejo que los RTOS, los cuáles están más en uso hoy en día. +![[Pasted image 20250515104852.png]] +### Qué es una tarea +Pieza de código ejecutable considerada un bloque básico en los STR, normalmente es un punto de entrada más el resto de funciones y recursos necesarios para su ejecución. Un programa tiene una o varias tareas. +## 2. Programación sistemas tiempo real +### 1. Secuencial (bucle scan) +Se ejecutan todas las tareas hasta el final antes de iniciar la siguiente. Se comparte información mediante variables globales. Latencia relativamente grande.ç +![[Pasted image 20250515105326.png|200]] +### 2. Primer/segundo plano +Se usan interrupciones para disminuir la latencia de las tareas. Aparecen las zonas críticas, en las que hay que deshabilitar las interrupciones para evitar condiciones de carrera. +![[Pasted image 20250515105628.png|400]] +### 3. Sistema operativo tiempo real +**Sistema Operativo:** colección de llamadas al sistema que proveen un conjunto básico de servicios para interactuar con el hardware. +**Sistema Operativo Tiempo Real:** un SO que además proporciona mecanismos para permitir la programación de tareas en tiempo real. Suelen tener: +- Soporte para ejecución concurrente (colas FIFO, semáforos) +- **Planificador** +- Gestión dinámica de memoria +- Modular, para ahorrar recursos si algún módulo no se usa y se quiere quitar +- Acceso a hardware a bajo nivel +#### El planificador +Decide que tarea hay que ejecutar. Hay dos tipos: +- **Cooperativo:** las tareas llaman al planificador cuando terminan su ejecución o cuando consideran que llevan usando demasiado tiempo la CPU. +- **Expropiativo:** el planificador se ejecuta automáticamente de forma periódica (tick) y hay una interrupción periódica que ejecuta el planificador. +#### Planificación apropiativa +El planificador, a parte de ejecutarse periódicamente por la interrupción guiada por los _ticks_, +se ejecuta cada vez que una tarea realiza una llamada del sistema. +#### Planificación basada en prioridades +- **Prioridades fijas:** + - Rate Monotonic (RM): mayor prioridad a las tareas con periodo más corto + - Deadline Monotonic (DM): mayor prioridad a las tareas con plazo de ejecución más corto +- **Prioridades dinámicas:** + - Earliest Deadline First (EDF): se planifica la tarea cuyo plazo está más cercano a expirar. +## 3. FreeRTOS. CMSIS-RTOS API +Hay dos tipos: proporcionados por el fabricante y gratuitos, y los desarrollados para varios microcontroladores (como FreeRTOS). +### Estilo notación FreeRTOS +Antiguamente se precedía el nombre de variables con el tipo (cVariable para char, fVariable para float, etc). +### Configuración de FreeRTOS +Algunos parámetros: +- USE_PREEMPTION: 1 RTOS expropiativo, 0 RTOS cooperativo +- MAX_PRIORITIES: nº de prioridades a usar +- TICK_RATE_HZ: frecuencia del tick +- MINIMAL_STACK_SIZE: minima RAM asignada a tarea +- TOTAL_HEAP_SIZE: RAM que puede usar el FreeRTOS +### Semáforos +Cuando hay compartición de recursos hay tres mecanismos: +- Suspender interrupciones y planificador (`taskENTER_CRITICAL`, `taskEXIT_CRITICAL`) +- Suspender el planificador (`vTaskSuspendAll(osKernelLock)`, `vTaskResumeAll`) +- Utilizar semáforos +#### Interbloqueos +Dos tareas y dos recursos, una adquiere uno y la otra el otro, pero las dos necesitan ambos para seguir y cada una se queda esperando al otro infinitamente. Se puede evitar: +- Semáforos con un _timeout_, de esta forma no se espera infinitamente el semáforo. +- Pidiendo los semáforos en el mismo orden siempre, haciendo que si no se obtiene el primero, no se pide el segundo +- Haciendo que una sola función reentrante sea la que pide los recursos siempre en el mismo orden +#### Inversión de prioridades +![[Pasted image 20250515113438.png]] +Se puede producir inversión de prioridades por culpa de los semáforos si lo tiene una tarea de baja prioridad, bloqueando una de alta prioridad. Para solucionar esto, se usan **mutex** que son semáforos binarios con **herencia de prioridades**. +