Professional Documents
Culture Documents
PROBLEMA
RAZON
Difcil de modificar
Si se modifica es muy
probable que deje de
funcionar
Difcil de entender
Difcil de depurar
No se encuentran fcilmente
subsistemas para acotar
fallas
Desarrollo sistemtico.
Adaptable a trabajar en equipo.
Mdulos de software reutilizables.
Depuracin simplificada.
Actualizacin y modificacin sencilla.
Auto-documentado.
Independencia del hardware.
Independencia del lenguaje de programacin.
Capacidad de autodiagnstico.
SUB1
SUB2
T1
T4
T2
T5
TN
T6
PROGRAMA PRINCIPAL
SUBN
T3
SUB3
SUB4
B. Multitarea estado-cooperativo
La propuesta es la de realizar uno mismo su propio
sistema operativo. Un esquema apropiado para
microcontroladores en sistemas embebidos, y la
propuesta del presente trabajo, es la tcnica de
programacin basada en una variante de multitarea
cooperativo llamado estado-cooperativo. En este
esquema cada tarea es una porcin del sistema
operativo y cada una de ellas administra su tiempo de
CPU. Las propias tareas recuerdan su estado de
evolucin convirtindose en unidades de software
independientes sin necesidad de intervencin o control
externo. El compromiso de diseo es el de emplear el
tiempo de CPU en una fraccin mnima e indispensable.
No existe un programa principal que resuelva los
algoritmos. El dialogo entre las tareas, a travs de la
5.
6.
bit1=0?
no
si
si
hay_dato
hay_dato
nuevo?
nuevo ?
no
no
si
Borrar
bandera RX
si
Borrar
bandera RX
dato_rx=MI_ID?
no
X
no
si
bit0=1; sgte
estado
X
dato_rx=ID_CPU?
no
X
si
bit1=1; sgte
estado
X
tarea_comunicacion
btfss
st_comunicacion,0
goto bit _0
btfss
st_comunicacion,1
goto bit _1
bit_0
if (!bit_test(st_comunicacion,1)) // bit1=0?
{
if (!bit_test(hay_dato ,0)
return ;
bit _clear(hay_dato ,0);
if (dato_rx==ID_CPU)
{
bit _set(st_comunicacion ,1);
return ;
}
else
return;
}
bsf st_comunicacion,1
return
Secuenciador lineal
INICIALIZACION DE VARIABLES
Y PERIFERICOS
While (true)
{
call tarea1();
call tarea2();
call tarea5();
call tarea1();
.
.
call tareaN();
}
interrupcion
periodica
cont1++;
contN++;
interrupcion por
eventos
call tarea_real
o bandera_evento=true
INICIALIZACION DE VARIABLES
Y PERIFERICOS
macro_estado1
call tarea4
call tareaM
.
.
.
return
While(true)
{
call tarea_permanente1
call tarea_permanente2
if (macro_estado1)
call estado1
if (macro_estado2)
call estado2
.
.
if (macro_estadoN)
call estadoN
}
nuevo
nombre
secuenciador
VI. CONCLUSIONES
lineal
macroestados
nueva tarea
importar tarea
estado 0
editar estado
estado N
fin tarea
compilar