Índice
Capítulo 1. Conceptos básicos de Sistemas Embebidos- 1.1 ¿Qué es un sistema embebido? 1
- 1.2 ¿Qué es una tarea? 2
- 1.3 ¿Qué es una multitarea? 3
- 1.4 ¿Qué es DeadLine? 4
- 1.5 ¿Qué es Prioridad? 6
- 1.6 ¿Qué es un Planificador? 8
- 1.7 ¿Qué es un RTOS? 8
- 1.8 ¿Qué es Concurrencia? 11
- 1.9 ¿Qué son Recursos Compartidos? 14
- 1.10 ¿Qué es Sincronización? 15
- 1.11 ¿Qué es Inanición? 17
- 1.12 ¿Qué es Punto Muerto? 17
- 1.13 ¿Qué es Mutex? 20
- 1.14 ¿Qué es un Semáforo? 20
- 1.15 ¿Qué es un Proceso Concurrente? 22
- 1.16 ¿Qué es Jitter y Latencias? 24
- 1.17 ¿Qué es Concurrencia Verdadera? 25
- 1.18 ¿Qué es Concurrencia Virtual? 27
- 1.19 ¿Qué es Tarea Cooperativa? 28
- 1.20 Analogía del tráfico vehicular con sistema embebido 29
- 1.21 ¿Qué es condición de carrera? 30
- 1.22 ¿Qué es un Heisenbug? 32
- 1.23 ¿Qué es una Operación Atómica? 39
- 1.24 ¿Qué es un Bloqueo Mutex? 41
- 1.25 Operación Atómica sin deshabilitar interrupciones 42
- 1.26 ¿Qué es el método Productor-Consumidor? 43
- 1.27 Principios Fundamentales de Concurrencia 44
- 1.27.1 Desempeño 45
- 1.27.2 Eficiencia 46
- 1.27.3 Escalabilidad 47
- 1.28 ¿Qué sigue? 48
- 2.1 ¿Qué es una tarea sincrónica? 49
- 2.2 ¿Qué es una API bloqueante? 52
- 2.3 Ventajas del modelo sincrónico 54
- 2.4 Desventajas del modelo sincrónico 55
- 2.5 ¿Qué es una tarea asincrónica? 56
- 2.6 ¿Qué es una API no bloqueante? 59
- 2.7 Ventajas del modelo asincrónico 62
- 2.8 Desventajas del modelo asincrónico 63
- 3.1 ¿Qué es un retardo en un sistema embebido? 65
- 3.2 ¿Qué es un retardo sincrónico? 65
- 3.3 Retardos asincrónicos por polling 68
- 3.4 La base de tiempo para retardos asincrónicos 69
- 3.5 ¿Por qué es mejor un temporizador de 32 bits? 70
- 3.5.1 Temporizador de 16 bits 71
- 3.5.2 Temporizador de 24 bits 72
- 3.5.3 Temporizador de 32 bits 72
- 3.5.5 ¿Qué hay del pre y post escalado de un temporizador? 73
- 3.6 Conclusiones del uso del temporizador de 32 bits 75
- 3.7 ¿Cómo generar un retardo asincrónico por polling? 77
- 3.8 Retardos asincrónicos por polling con temporizador libre 79
- 3.9 Retardos asincrónicos por callback 86
- 3.10 Múltiples retardos simultáneos con callback 88
- 4.1 ¿Qué es una máquina de estados? 92
- 4.2 Estados, transiciones y eventos 94
- 4.3 Implementación en C – switch-case y enum 98
- 4.4 Completando la tarea 105
- 4.4.1 Estado de inicialización 105
- 4.4.2 Estado de reposo 106
- 4.4.3 Estado de transmisión 106
- 4.4.4 Estado de recepción 108
- 4.5 Retardos asincrónicos en los estados de máquina 112
- 4.6 Conclusiones 113
- 5.1 ¿Qué es un bucle? 117
- 5.2 Bucle simple sincrónico 118
- 5.3 Bucle anidado sincrónico 119
- 5.4 Bucle asincrónico 120
- 5.5 Conclusiones 126
- 6.1 ¿Qué es una interrupción? 132
- 6.2 ¿Cómo funciona una interrupción? 135
- 6.3 Precauciones de la ISR 138
- 6.3.1 Condición de carrera 138
- 6.3.2 Volatilidad 138
- 6.3.3 Latencia de la ISR 139
- 6.3.4 Interferencia en el código principal 140
- 6.3.5 Bloqueo por naturaleza 141
- 6.3.6 Falsa prioridad 141
- 6.4 El manejador de interrupción — callback 135
- 6.5 Periféricos independientes 145
- 6.5.1 Ejemplos de periféricos independientes 146
- 6.6 Ventajas de los periféricos independientes 147
- 6.7 Desventajas de los periféricos independientes 148
- 6.8 ¿Cuándo no conviene utilizar periféricos independientes? 149
- 7.1 ¿Qué es la depuración en sistemas embebidos? 151
- 7.2 ¿Por qué es importante la depuración? 151
- 7.3 Problemas y limitaciones de depurar un sistema embebido 152
- 7.3.1 Modificación del comportamiento temporal 152
- 7.3.2 El observador modifica el sistema 152
- 7.3.3 Consumo de recursos 153
- 7.3.4 Errores que desaparecen durante la depuración 153
- 7.3.5 Cobertura limitada 153
- 7.3.6 Dependencia del hardware 153
- 7.4 Depuración en un sistema cooperativo vs un sistema con RTOS 154
- 7.5 El problema de usar
printfpara depurar 155 - 7.6 El programador-depurador 157
- 7.7 Simulador de hardware 158
- 7.8 Indicadores visuales 160
- 7.9 Medición de tiempos con el temporizador 161
- 7.10 El analizador lógico 161
- 7.11 Comandos de consulta por comunicación 163