Documente Academic
Documente Profesional
Documente Cultură
Alejandro Celery
acelery.utn@gmail.com
Introduccin a los sistemas embebidos - FI-UBA - 2011
Parte 1
Un poco de contexto
Sistemas embebidos
Los sistemas embebidos son plataformas con
recursos muy limitados en comparacin con una PC.
Es por esto que generalmente no tienen un sistema
operativo completo, sino slo el subconjunto de
estos que pueden manejar ventajosamente.
En algunos casos el OS no es un programa en s
mismo sino que es un conjunto de funciones que se
ejecutan solo en momentos determinados del
programa.
Qu es un OS?
Es un conjunto de programas que ayuda al programador de
aplicaciones a gestionar los recursos de hardware disponibles, entre
ellos el tiempo del procesador y la memoria.
La gestin del tiempo del procesador permite al programador de
aplicaciones escribir mltiples subprogramas como si cada uno fuera
el nico que utiliza la CPU.
Una parte del OS se encarga de asignar tiempo de ejecucin a
todos los programas que tiene cargados en base a un juego de
reglas conocido de antemano. A estos subprogramas se los llama
tareas.
Con esto se logra la ilusin de que mltiples programas se ejecutan
simultneamente, aunque en realidad slo pueden hacerlo de a uno
a la vez (en sistemas con un slo ncleo, como es el caso general
de los sistemas embebidos).
Ms contexto
Se llama contexto de ejecucin al conjunto de
recursos que identifican el estado de ejecucin de
una tarea:
IP (instruction pointer)
SP (stack pointer)
Registros del CPU
Contenido de la pila en uso
Cambiemos de contexto
Cuando el scheduler determina que debe cambiarse
el contexto de ejecucin, invoca a otro componente
del OS llamado dispatcher para que guarde el
contexto completo de la tarea actual y lo reemplace
por el de la tarea entrante.
Por esta razn debe reservarse un bloque de
memoria de datos para cada tarea. Esto limita la
cantidad de tareas simultneas del sistema (pueden
sin embargo eliminarse y crearse nuevas tareas en
tiempo de ejecucin).
Cambiemos de contexto
Estos cambios de contexto se realizan de forma
transparente para la tarea, no agregan trabajo al
programador. Cuando la tarea retoma su ejecucin
no muestra ningn sntoma de haberla pausado
alguna vez.
Los OS trabajan en dos modos:
Qu es un RTOS?
Un RTOS es un sistema operativo de tiempo real.
Esto significa que hace lo mismo que un OS comn
pero adems me da herramientas para que los
programas de aplicacin puedan cumplir
compromisos temporales definidos por el
programador. El objetivo del mismo es diferente de
un OS convencional.
Un RTOS se emplea cuando hay que administrar
varias tareas simultneas con plazos de tiempo
estrictos.
10
Esto implica que una aplicacin mal diseada puede fallar en la atencin
de eventos an cuando se use un RTOS.
Tarea Idle
11
Multitarea
Escalabalidad
12
La letra chica 1
13
La letra chica 2
Tareas peridicas
Tareas aperidicas
15
Caso de estudio
16
Parte 2
Por qu FreeRTOS
Es de cdigo abierto
18
Es fcil de implementar
19
20
21
FreeRTOSConfig.h
22
configUSE_PREEMPTION
configCPU_CLOCK_HZ
configTICK_RATE_HZ
configMAX_PRIORITIES
configMINIMAL_STACK_SIZE
configTOTAL_HEAP_SIZE
configUSE_USE_MUTEXES
configUSE_CO_ROUTINES
#define INCLUDE_vTaskDelete 1
Parte 3
Tareas en FreeRTOS
24
25
// Cuerpo de la tarea
for( ;; )
{
vPrintString( pcTaskName ); // enva el string a la consola del IDE
for( ul = 0; ul < mainDELAY_LOOP_COUNT; ul++ ) { }
}
// La tarea NUNCA debe pasar de este punto, si lo hiciera debe ser
eliminada
vTaskDelete(NULL);
}
26
// Cuerpo de la tarea
for( ;; )
{
vPrintString( pcTaskName ); // enva el string a la consola del IDE
for( ul = 0; ul < mainDELAY_LOOP_COUNT; ul++ ) { }
}
// La tarea NUNCA debe pasar de este punto, si lo hiciera debe ser
eliminada
vTaskDelete(NULL);
}
27
29
Ejemplo 1: Demostracin
Vemoslo funcionando
30
31
Algoritmo de scheduling
33
34
35
Consideraciones de diseo
37
Ejemplo 3: Demostracin
Vemoslo funcionando
39
40
Parte 4
Primera prctica con FreeRTOS
42
Recursos de software 1
43
Recursos de software 2
44
Recursos de hardware
45
Parte 5
Ms estados de las tareas
Funciones de temporizacin
49
Tareas peridicas
50
Parte 6
Sincronizacin entre tareas y
eventos
Tareas aperidicas
52
Qu es un semforo?
53
54
55
56
57
portMAX_DELAY
(debe estar #define taskSuspend 1 en
FreeRTOSConfig.h)
58
500 / portTICK_RATE_MS
59
60
Vemoslo funcionando
61
vSemaphoreCreateBinary( xSemaphoreHandle
xSem )
xSemaphoreTake( xSemaphoreHandle xSem,
portTickType xBlockTime )
xSemaphoreGive( xSemaphoreHandle xSem )
62
Cuestiones de implementacin
Los semforos son objetos del kernel. Se toma memoria del sistema por
cada uno que se crea.
Deben ser vistos por todas las tareas del sistema => se crean en forma
global (y antes de iniciar el scheduler)
Los semforos son tiles siempre que hay dependencias entre tareas y
eventos o entre tareas solamente.
63
Checkpoint!
Los conceptos de
sincronizacin vistos hasta
ahora se repiten en los
prximos captulos.
64
Parte 7
Manejo de colas para
intercambio de datos
66
68
69
70
uxQueMessagesWaiting().
71
72
73
}
}
74
75
76
Vemoslo funcionando
77
Cuestiones de diseo
La cantidad de elementos de la cola debe contemplar el
peor caso de uso posible.
Si los elementos son muy grandes es preferible usar la
cola para enviar datos por referencia y no por copia. En
este caso debe usarse memoria global. Y debe
preveerse que los datos apuntados se mantengan
vlidos hasta que sean consumidos.
Recordar que las operaciones de cola pueden llevar un
tiempo de bloqueo, en este caso debe chequearse el
valor de retorno de la llamada.
Al analizar las prioridades de las tareas que emplearn la
cola, contemplar los casos de cola llena, cola vaca y si
el envo los datos encolados debe interrumpir a la
dealos
mismos.
78 generacin
Introduccin
los RTOS
- 2011 - FI-UBA
Parte 8
Gestin de recursos
Problemticas de la concurrencia
Exclusin mutua
81
82
83
84
85
86
Uso de mutex
mutex = xSemaphoreCreateMutex();
xSemaphoreTake(mutex, portMAX_DELAY);
consoleprint(Hola Mundo!);
xSemaphoreGive(mutex);
87
88
89
Conteo de eventos
90
91
vSemaphoreCreateBinary( xSemaphoreHandle
xSemaphore )
xSemaphoreHandle
xSemaphoreCreateCounting(uxMaxCount, uxInitialCount
)
xSemaphoreHandle xSemaphoreCreateMutex( void )
Parte 9
Segunda prctica con FreeRTOS
93
Parte 10
Algunos problemas de los mutex
95
La inversin de prioridades
El deadlock
Introduccin a los RTOS - 2011 - FI-UBA
Inversin de prioridades
Pongamos un ejemplo:
96
Inversin de prioridades
97
Priority inheritance
98
Como se evita?
99
Deadlock
100
Como se evita?
En
http://es.wikipedia.org/wiki/Problema_de_la_cena_de_los_filosofo
s se puede ver el problema en detalle y varias soluciones al
mismo.
101
Parte 11
Interrupciones y FreeRTOS
103
xSemaphoreGiveFromISR
xQueueSendFromISR
xQueueReceiveFromISR
104
No hay xSemaphoreTakeFromISR
No hay xDelayFromISR
No hay taskYIELDFromISR
105
106
Parte 12
Tercera prctica con FreeRTOS
108
109
110
111
Parte 11
Funcionalidad en el estado Idle y
en el Systick handler
#if ( configUSE_IDLE_HOOK == 1 ) {
vApplicationIdleHook(); // Hook
} #endif
}
}
114
Cuestiones de implementacin
116
Mantenerla breve
No bloquear
Usar funciones FromISR
Introduccin
a los RTOS
- 2011 -transcurrido
FI-UBA
Es til
para contar
tiempo
sin dedicarle
Llamada al TickHook
void vTaskIncrementTick( void )
{ // Esta funcin se llama dentro de una seccin crtica en el Systick
Handler
if( uxSchedulerSuspended == pdFALSE ) {
++xTickCount;
prvCheckDelayedTasks(); // Chequeo de tareas en vTaskDelay
}
#if ( configUSE_TICK_HOOK == 1 )
{
vApplicationTickHook(); // Hook
}
#endif
}
117
Parte 12
Cmo encarar un diseo con
RTOS
119
120
121
122
123
124
125
126
127
128
129
Implementacin y verificacin
130
Parte 13
Asignacin dinmica de memoria
Tareas
Semaforos / Mutex
Colas
132
133
Heap_1.C
134
Heap_2.C
135
Heap_3.C
136
Cul elegir?
137
138
Parte 14
Verificacin del uso de las pilas
140
141
void vApplicationStackOverflowHook ()
Introduccin a los RTOS - 2011 - FI-UBA
Dos mtodos
142
Depuracin
143
Parte 15
Las 5 cosas que no entraron en
el curso
Reentrancia
145
2. Coroutines
Ver http://www.freertos.org/croutine.html
Las CR son como los threads de un sistema tipo
UNIX.
146
3. Trazado de la ejecucin
Ver http://www.freertos.org/rtos-trace-macros.html
A lo largo del cdigo hay numerosas macros en
puntos de inters de la aplicacin
traceQUEUE_SEND_FROM_ISR
traceTASK_SWITCHED_IN
traceTASK_SWITCHED_OUT
147
Ver
http://www.freertos.org/rt
os-run-time-stats.html
La API tiene varias
funciones para generar
estos datos
Las demos para
plataformas con interfaz
ethernet contienen una
tarea para mostrar esta
informacin
148
http://en.wikipedia.org/wiki/Ratemonotonic_scheduling
http://en.wikipedia.org/wiki/Earliest_deadline_first_sc
heduling
149
150
Se sugiere la realizacin
de las actividades
propuestas.
Preguntas?
Se sugiere la realizacin
de las actividades
propuestas.
Sera bueno que vayan
definiendo los proyectos!
Preguntas?
152
Fin de la exposicin
Preguntas?
A trabajar en los
proyectos!
153