Autor Tema: Protothreads, un mini RTOS 100% C  (Leído 7510 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado jgpeiro06

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 276
Protothreads, un mini RTOS 100% C
« en: 24 de Noviembre de 2010, 20:41:14 »
Leí sobre esta librería hace tiempo en un articulo en elektor y me llamó la atención. Espero que a vosotros también....

Los protothreads proporcionan un contexto multitarea cooperativo, utilizando unas tecnicas muy curiosas para cambiar de contexto.
Al contrario que la mayoria de RTOS, protothreads estan escritas TOTALMENTE en C y pueden trabajar en cualquier plataforma que disponga de compilador de C. Por supuesto, proporcionan menos servicios que otros RTOS, pero pueden resultar muy interesantes para arquitecturas como PIC12 o PIC16 o incluso PIC10.

Info de su WWW:
Protothreads son threads extremadamente ligeros, threads sin stack que proporcionan el bloqueo de contexto en la parte superior de un sistema orientado a eventos, sin la sobrecarga de por pilas de subprocesos.
El propósito de protothreads es implementar el flujo secuencial de control sin necesidad de utilizar máquinas de estado complejas o un multi-threading total.
Protothreads proporcionan "bloqueo condicional" dentro de una función C.

Un ejemplo sencillo que corre en un PIC24
Código: C
  1. #include <stdio.h>      // For printf()
  2. #include "pt.h"         // Protothreads include
  3.  
  4. static struct pt pt1, pt2;
  5. static int protothread1_flag = 0, protothread2_flag = 0;
  6.  
  7. static int protothread1(struct pt *pt){
  8.         PT_BEGIN(pt);
  9.         while(1) {
  10.                 PT_WAIT_UNTIL(pt, protothread1_flag != 0);
  11.                 protothread1_flag = 0;
  12.                 printf("Protothread 1 running\n");
  13.                 protothread2_flag = 1;
  14.         }
  15.         PT_END(pt);
  16. }
  17.  
  18. static int protothread2(struct pt *pt){
  19.         PT_BEGIN(pt);
  20.         while(1) {
  21.                 PT_WAIT_UNTIL(pt, protothread2_flag != 0);
  22.                 protothread2_flag = 0;
  23.                 printf("Protothread 2 running\n");
  24.                 protothread1_flag = 1;
  25.         }
  26.         PT_END(pt);
  27. }
  28.  
  29.  
  30. int main(void){
  31.         PT_INIT(&pt1);
  32.         PT_INIT(&pt2);
  33.  
  34.         protothread1_flag = 1,
  35.         protothread2_flag = 0;
  36.  
  37.         printf("Protothreads start\n");
  38.         while(1) {
  39.                 protothread1(&pt1);
  40.                 protothread2(&pt2);
  41.         }
  42. }
Salida del programa por la USART:
Código: [Seleccionar]
Protothreads start
Protothread 1 running
Protothread 2 running
Protothread 1 running
Protothread 2 running
Protothread 1 running
Protothread 2 running
« Última modificación: 25 de Noviembre de 2010, 06:57:51 por jgpeiro06 »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Protothreads, un mini RTOS 100% C
« Respuesta #1 en: 24 de Noviembre de 2010, 20:55:41 »
Hola Jgpeiro, se ve sumamente tentador. Es realmente sencillo el ejemplo que pones.

¿Tendrás la web de donde lo obtuviste?

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Protothreads, un mini RTOS 100% C
« Respuesta #2 en: 24 de Noviembre de 2010, 21:22:42 »
Hola, parece un jugete, para micros mas chicos conviene usar un RTOS cooperativo o un executive override o directamente la nada.


Saludos !

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Protothreads, un mini RTOS 100% C
« Respuesta #3 en: 24 de Noviembre de 2010, 21:27:19 »
...directamente la nada.
:-/ :-/  :mrgreen:  Como dice psykhon, que es eso de 8-bits o 16-bits  :huh:  :D
No contesto mensajes privados, las consultas en el foro

Desconectado manutek

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 555
Re: Protothreads, un mini RTOS 100% C
« Respuesta #4 en: 24 de Noviembre de 2010, 23:59:39 »
Che que interesante jgpeiro06  como todas las cosas que publicas, justo estoy definiéndome para avanzar con algún rtos y estoy a punto de optar por el SALVO de pumpking que entra en los pic mas chiquitos y es compatible con picc18 y picc de hi tech
saludos  :)
No es la conciencia del hombre la que determina su ser, sino, por el contrario, es su ser social el que determina su conciencia

Desconectado bmfranky

  • PIC16
  • ***
  • Mensajes: 165
    • La Tienda De Fran
Re: Protothreads, un mini RTOS 100% C
« Respuesta #5 en: 25 de Noviembre de 2010, 09:39:58 »
Hola chicos, el enlace esta puesto, pinchad sobre las WWW y accedéis directos. esta en ingles , para mi , :oops:"BabelFish " :oops: al canto,  ustedes supongo que sin problemas... ;-)
Visiten La Tienda De Fran ;-) Aqui. y mi nueva Web Aqui.

Desconectado Arte8bits

  • PIC10
  • *
  • Mensajes: 10
    • Pagina web de Javier Longares
Re: Protothreads, un mini RTOS 100% C
« Respuesta #6 en: 22 de Octubre de 2011, 20:16:10 »
Hola,

Los protothreads son potentes cuando se quieren hacer sistemas complejos en micros pequeños, pero tanto como llamarlo un RTOS...

Como preguntáis por información en castellano al respecto, quiero invitaros a leer mi último artículo, que precisamente trata sobre los protothreads, y sobre las ventajas y desventajas de usar modelos por eventos y basados en threading.

http://www.javierlongares.com/arte-en-8-bits/protothreads-threads-en-c-sin-sistema-operativo/

En realidad, como podéis ver, los protothreads no son más que una peculiar forma de usar las instrucciones switch y case. Por favor, sentiros libres de comentarme cualquier tipo de duda que tengáis al respecto.

Un saludo
Te invito a visitar y compartir el contenido de Arte en 8 bits el blog de sistemas embebidos en español.

Javier Longares Abaiz

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: Protothreads, un mini RTOS 100% C
« Respuesta #7 en: 25 de Octubre de 2011, 11:42:36 »
Suena muy interesante! Ademas me parece que es mucho mas sencillo para el usuario comenzar a a utilizar uno de estos que un SO completo.
es cuestion de probarlo

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Protothreads, un mini RTOS 100% C
« Respuesta #8 en: 26 de Octubre de 2011, 11:58:45 »
Hola, acá dejo una nota interesante entre ProtoThreads vs Maquinas de estado. Esta en ingles

http://embeddedgurus.com/state-space/2011/06/protothreads-versus-state-machines/

Saludos !

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Protothreads, un mini RTOS 100% C
« Respuesta #9 en: 26 de Octubre de 2011, 22:09:03 »
En realidad no hacen otra cosa que implementar un planificador "Single Excecutive". Es una forma muy simple de hacer multitarea cooperativa.

Pero no se equivoquen, que por ser simples no son menos potentes. Son como cualquier método, tienen ventajas y desventajas.

Tal como se ha comentado son muy efectivos en sistemas con restricciones muy severas en cuanto a recursos y abstraen al programdor de la necesidad de tener que hacer él toda la planificación.

Dado que todo sistema que no sea un While end, sin ISR, y llamadas a función requiere algún tipo de planificador, todos nosotros en algún momento hemos hecho un planificador, malo, bueno, pésimo... abismal. Así que a mi juicio lo mejor es buscarse una herramienta que abstraiga al programador de tener que hacer "donkey-work" y dedicarse a lo útil, código de aplicación.

Bienvenidos los protothread.


Mi consejo para PICS, no los usen más allá de los PIC16, ni por debajo de los PIC08.

Saludos
Reinier

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Protothreads, un mini RTOS 100% C
« Respuesta #10 en: 27 de Octubre de 2011, 00:02:55 »
Mi consejo para PICS, no los usen más allá de los PIC16, ni por debajo de los PIC08.

Como esta eso amigo reinier.


saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado reiniertl

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Protothreads, un mini RTOS 100% C
« Respuesta #11 en: 28 de Octubre de 2011, 23:05:45 »
Y sabía yo que saldría alguien a protestar por el PIC08, sólo esperaba ver quen sería.

Nada que a mi juicio esta técnica es buena para PIC10, PIC12 y PIC16, quizá algún PIC18 de los menos dotados de recursos. Cualquier cosa que requiera de un PIC18 gordo o algo mejor, a mi juicio le recomiendo un RTOS más potente.

Aunque con los precios actuales del mercado, hay mucha gente utilizando uC de 16 y 32 bits solamente porque los precios están casi al mismo alcance que los de 8 bits.

Saludos
Reinier