bueno quiero compartir con vosotros un proyecto que hice hace tiempo, Era bastante novato y ahora veo que se podría hacer mucho mejor pero funciona perfectamente, y me gustaría compartirlo por si a alguien le puede ayudar o le sirve para algo.
es un "sistema operativo en tiempo real" lo pongo entre comillas por que no puede llamarse exactamente así, es mas bien un scheduler, o un manejador de tareas que puede reducir el tiempo de desarrollo de software muchisimo, se quedo en scheduler por que lo estaba desarrollando para PIC32 pero como quiero dejar de usarlos pues tampoco me convence el esfuerzo de acabarlo, el amigo KILLERJC esta mucho mas preparado que yo para terminarlo, ya que mi plan era mediante ASM poner etiquetas apuntando a una tarea vacía para implementar los delay y los semaforos, y cuando tocara retornar la etiqueta del código continuara por el while de la tarea. pero en fin.
El sistema es portable a cualquier PIC modificando el archivo System_Init.c que es donde se ponen los fuses y se configuran los periféricos. actualmente esta preparado para un PIC32MX250.
una vez tengaís configurado vuestro hardware en el archivo task.h indicais cuantas tareas va a ejecutar vuestro sistema y en el archivo task.c:
/*******************************************************************************
Author: Juan José Perales Serrano
Descripcion:
Fichero donde se ubican las tareas del sistema operativo
recordar escribir el numero de tareas que se realicen en tasks.h
*******************************************************************************/
#include "tasks.h"
#include "app.h"
//VARIABLES GLOBALES DE LAS TAREAS
void vTask1(void) //tarea de ejemplo
{
}
void vTask2(void) //tarea de ejemplo
{
}
void BlinkDisplay() //tarea de ejemplo
{
}
void LeerPulsadores(void) //tarea de ejemplo
{
}
/*******************************************************************************
Funcion:
void CreateAllTasks(void)
Descripcion:
Se encarga de crear una pila de punteros a las tareas declaradas para que
JJOS tenga constancia de ellas, de esta manera el Scheduler podra ejecutar
las tareas
"0" maxima prioridad
Precondiciones:
Programar las tareas previamente en este mismo fichero
Returns:
Nada.
Ejemplo:
void Task1(void)
{
<code>
}
void Task2(void)
{
<code>
}
void CreateAllTasks(void)
{
CreateTask(Task1,"prioridad","tiempo(ms)");
CreateTask(Task2,"prioridad","tiempo(ms)");
}
*******************************************************************************/
void CreateAllTasks(void)
{
CreateTask(vTask1,0,10);
CreateTask(vTask2,1,5);
CreateTask(BlinkDisplay,2,4);
CreateTask(LeerPulsadores,3,100);
OrdenarPrioridades(); //Ejecutar obligatoriamente al final del ciclo
}
creaís vuestras tareas, como si de funciones se tratasen, y al final ejecutais la funcion CreateALLTasks(void) poniendo la preferencia de cada tarea ademas del periodo en el que debe ejecutarse.
y ya esta, vuestro hardware funcionara con toda las bases de tiempo configuradas y las prioridades puestas.
lo he llamado JJOS y lo hice mezclando varias sistemas operativos simples y schedulers que fui encontrando por hay, y añadiendo lo que me gustaba y quitando las cosas que no.
Actualmente esta configurado para TICKs de 1ms.
obviamente podeís cambiar todo lo que queraís del código y poner un TICKs de 10uS por ejemplo pero esto dependerá de la velocidad del micro, para uno de 40-50Mhz no lo bajaría mas de 100uS
también os dejo uno de mis primeros circuitos que hice que me ha servido para probar muchos programitas, incluido este JJOS, es como el típico circuito con un 18F2550 pero con un PIC32MX que para los que se quieran iniciar les vendrá muy pero que muy bien, es muy sencillo y se puede hacer con una CNC o con fotolitos, solo tiene 2 pueentes que quedan escondidos debajo del micro
tiene un pequeño fallo de diseño que no influye, el condensador C9 o C3 sobra por que estan en paralelo ( ya he dicho que era novato
)
la placa es compatible con todos los PIC32MX2xx y PIC32MX1xx en PDIP aunque recomiendo poner de la serie 2 para tener USB.
adjunto el proyecto entero en KICAD, y los archivos de fabricacion para una CNC que es donde yo la fabrique, pero podeis sacar los fotolitos y hacerla con acido si queréis.
tambien adjunto el proyecto JJOS esta compilado en XC32 1.31
un saludo y espero que les ayude en algo.