Contador de Programa (PC) en Arduino

Hola a todos.
Me encuentro en un gran dilema. Llevo días intentando solucionar este problema, espero que me puedan ayudar :slight_smile:

Resulta que me encuentro haciendo un sistema operativo multitarea en tiempo real; es un proyecto para la universidad, y pues decidí hacerlo en mi Arduino UNO.

Mi problema radica en no saber cómo direccionar el Contador de programa -PC- ya que al ejecutar una tarea, debo direccionar el PC a la ubicación de la memoria en la que previamente he cargado dicha tarea.

Les adjujnto un pseudo codigo del sistema operativo:

struct PCB {
int identificador;
int direccion_inicio;
int direccion_ejecucion;
int estado_proceso;
int acumuldor;
int palabra_estado;
};

struct particion {
int idp;
int inicio_p;
int fin_p;
int estado_p;
int tamano_p;
};

PCB procesos[100];
int cola_procesos[100];
int cmd; int npc;

particion memoria[100];
int cparticiones = 6;

void setup(){
for (int i = 0;i <= 5 ;i++){
memoria*.idp = 1;*
memoria.inicio_p = 4096 + 4096i;
memoria.fin_p = 8192 + 4093i;

memoria*.estado_p = 0;
memoria.tamano_p = 4096;
_}
}
void loop(){
//cmd = leer comando();
/switch(cmd){
case 1:

* break*
* case 2:
breack*

* …
}/

if(procesos[cola_procesos[0]].estado_proceso == 1){
* //iniciar_Timer();
procesos[cola_procesos[0]].estado_proceso = 2;
//PC = procesos[cola_procesos[0]].direccion_inicio,*

}
else{
* //recuperar_entorno();
//iniciar_Timer();
//PC = procesos[cola_procesos[0]].direccion_ejecucion;*

}
}_

Cualquier ayuda o sugerencia de cómo poder manipular el PC será muy agradecida.

Mirate estos links :
https://github.com/MikeSmith/scmRTOS_Arduino
http://robotgroup.com.ar/duinos/wiki/index.php?title=Main_Page

De todas maneras RTOS en un arduino uno (31.5 k disponibles) no creo que puedas hacer muchas cosas, ya puestos y como es un trabajo para la universidad utiliza un atmega128.

Hola yOPERO!

Gracias por tu comentario. Ya había visto Duinos y creo que ya hace varios años que no es actualizado y lo de scmRTOS se ve bastante interesante. La verdad no necesito "hacer muchas cosas", hacer parpadear dos leds a distinta frecuencias sería suficiente; pero el programa debe tener la estructura que he mencionado.

Las tareas que realice el sistema operativo serán cargadas a la memoria flash via comunicación serial en una de las particiones libres que se ha hecho a la memoria, por lo que se sabrá de antemano donde inicia y termina cada tarea y de esta forma direccionar el PC a esta posición. La mayoría de mis compañeros (todos los demás) lo están realizando en PIC y quisé probar en Arduino dado que me pareció ser más 'potente' por lo que he leído pero me vine a encontrar con este incoveniente :~

Cualquier nueva sugerencia será bienvenida!