Les comento las caracteristicas del Sistema Operativo que desarrolle (LMOS):
Sistema operativo:
-Cooperativo.
-Sin uso de stack*
-Manejo de multiples eventos con timeouts
-Manejo de retardos
-Manejo de prioridades:
Ejecuta la tarea activa de mas alta prioridad, a tareas con la misma prioridad realiza Round Robin.
32 niveles, 0=La mas alta prioridad
-Contabilizacion de uso de CPU por tarea.
-Soporta PIC24, PIC18 y PIC16 a traves de configuracion
Llamadas al OS:
LMOS_INIT() Inicializa el sistema operativo
LMOS_SCHEDULER() Manejador de tareas, se ubica en el prog ppal en un superloop luego de las inicializaciones.
LMOS_GET_TICKS() En el caso de estar activado LMOS_DEF_ENABLE_SYS_TICK entrega el tick actual del sistema
LMOS_TIMER() Llamada al tick del sistema, se ubica en la interrupcion de reloj.
LMOS_CREATE_TASK() Crea la tarea en tiempo de ejecucion y la pone en estado "elegible"
LMOS_DESTROY() Destruye la tarea actual y retorna al scheluder
LMOS_DESTROY_TASK() Destruye la tarea indicada
LMOS_STOP() Detiene la tarea actual y retorna al scheluder
LMOS_YIELD() Genera un context switch en la tarea de donde se lo llamo y retorna al scheluder
LMOS_GET_TASK_STATE() Entrega el estado actual de la tarea solicitada
LMOS_CHANGE_PRIO() Cambia la prioridad de la tarea actual
LMOS_CHANGE_TASK_PRIO() Cambia la prioridad de la tarea seleccionada
LMOS_DELAY() Genera la demora seleccionada y genera un context switch en la tarea de donde se lo llamo y retorna al scheluder.
LMOS_INIT_SEMAPHORE() Inicializa el semaforo seleccionado
LMOS_SIGNAL_SEM() Activa el semaforo seleccionado
LMOS_WAIT_SEM() Espera al semaforo seleccionado por un periodo seleccionado (0=por siempre) y genera un context switch en la tarea de donde se lo llamo y retorna al scheluder.
LMOS_TIMED_OUT() Consulta al OS si el semaforo elegido por la tarea fue activado.
LMOS_CPU_USAGE() Entrega el porcentaje usado de micro por la tarea seleccionada en el momento con una actualizacion dependiente de LMOS_DEF_N_CPU_TOT_TICK
LMOS_CPU_USAGE_CURRENT() Entrega el porcentaje usado de micro por la tarea actual en el momento con una actualizacion dependiente de LMOS_DEF_N_CPU_TOT_TICK
LMOS_CPU_USAGE_SCHED() Entrega el porcentaje usado de micro por el Scheduler en el momento con una actualizacion dependiente de LMOS_DEF_N_CPU_TOT_TICK
LMOS_GET_TASK_TICK() Entrega cantidad de ticks al momento, haciendo la diferencia entre tomas de dicha funcion se sabe el tiempo de proceso por cada contexto
En mi pagina (que esta re verde)
voy a subir el codigo mas actualizado.
Saludos