La programación multitarea permite atender dos o mas procesos de forma concurrente o simultánea. En esta charla se mostrará ejemplos sencillos de como implementar este tipo de códigos utilizando ANSI C en microcontroladores AVR de 8bits, así como buenas prácticas de programación para su implementación. La platica está dirigida a un público básico e intermedio que haya programado en lenguaje C y conozca los microcontroladores de 8bits.
2. CONCEPTOS
• THREAD: HILO, PROCESO INDIVIDUAL EJECUTANDOSE EN UN
PROGRAMA
• UN PROGRAMA DE FLUJO ÚNICO O MONO-HILVANADO (SINGLE-THREAD)
UTILIZA UN ÚNICO FLUJO DE CONTROL (THREAD) PARA CONTROLAR SU
EJECUCIÓN.
• TIEMPO COMPARTIDO COMPARTIR DE FORMA CONCURRENTE UN RECURSO
COMPUTACIONAL (TIEMPO DE EJECUCIÓN EN LA CPU, USO DE LA MEMORIA,
ETC.) ENTRE MUCHOS USUARIOS POR MEDIO DE LAS TECNOLOGÍAS DE
MULTIPROGRAMACIÓN Y LA INCLUSIÓN DE INTERRUPCIONES DE RELOJ POR PARTE
DEL SISTEMA.
2/20
3. CONCEPTOS
• TIMER: TEMPORIZADOR
• INTERRUPCIONES: COMPARTIR DE FORMA CONCURRENTE UN RECURSO
COMPUTACIONAL (TIEMPO DE EJECUCIÓN EN LA CPU, USO DE LA
MEMORIA, ETC.) ENTRE MUCHOS USUARIOS POR MEDIO DE LAS
TECNOLOGÍAS DE MULTIPROGRAMACIÓN Y LA INCLUSIÓN DE
INTERRUPCIONES DE RELOJ POR PARTE DEL SISTEMA.
3/20
4. PROGRAMAS DE FLUJO ÚNICO
• UN PROGRAMA DE FLUJO ÚNICO O MONO-HILVANADO (SINGLE-THREAD) UTILIZA UN
ÚNICO FLUJO DE CONTROL (THREAD) PARA CONTROLAR SU EJECUCIÓN. MUCHOS
PROGRAMAS NO NECESITAN LA POTENCIA O UTILIDAD DE MÚLTIPLES FLUJOS DE
CONTROL.
• SIN NECESIDAD DE ESPECIFICAR EXPLÍCITAMENTE QUE SE QUIERE UN ÚNICO FLUJO DE
CONTROL, MUCHOS DE LOS APPLETS Y APLICACIONES SON DE FLUJO ÚNICO.
4/20
10. PROGRAMANDO CÓDIGO EFICIENTE EN ANSI C
10
10/20
COMPILADOR CARQUITECTURA AVR
SET DE INSTRUCCIONES
32 REGISTROS
PUNTEROS 24 BITS
11. EFICIENCIA EN 8 BITS (ATMEGA16/32)
• LOS PUNTEROS SIRVEN PARA ACCEDER A DATOS ALMACENADOS EN LA
MEMORIA FLASH DE PROGRAMA (ESTOS DATOS SON SOLO DE LECTURA).
• MANEJANDO DATOS DE 16 BITS, SUMA Y RESTA INMEDIATA (ADIW, SBIW).
• OPERACIONES ARITMÉTICAS Y DE COMPARACIÓN CON VALORES DE 16 BITS
(2 INSTRUCCIONES Y 2 CICLOS DE RELOJ).
• ANÁLOGO SE PUEDEN REALIZAR OPERACIONES ARITMÉTICAS Y DE
COMPARACIÓN CON DATOS DE 32 BITS (4 INSTRUCCIONES Y 4 CICLOS DE
RELOJ).
11
11/20
13. 13
13/20
char *pointer1 = &table[0];
char *pointer2 = &table[49];
*pointer1++ = *- -pointer2;
LD R16,-Z ;predecrementa el puntero Z y carga dato
ST X+,R16 ;almacena dato y pos-incrementa
ANSI C
Lenguaje Ensamblador
VS
2 ciclos de reloj e
instrucciones de una
sola palabra