TODOPIC

Microcontroladores PIC => RTOS => Mensaje iniciado por: jgpeiro06 en 24 de Noviembre de 2010, 20:41:14

Título: Protothreads, un mini RTOS 100% C
Publicado por: jgpeiro06 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 (http://www.sics.se/~adam/pt/):
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
Título: Re: Protothreads, un mini RTOS 100% C
Publicado por: migsantiago 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?
Título: Re: Protothreads, un mini RTOS 100% C
Publicado por: RICHI777 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 !
Título: Re: Protothreads, un mini RTOS 100% C
Publicado por: Suky 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
Título: Re: Protothreads, un mini RTOS 100% C
Publicado por: manutek 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  :)
Título: Re: Protothreads, un mini RTOS 100% C
Publicado por: bmfranky 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... ;-)
Título: Re: Protothreads, un mini RTOS 100% C
Publicado por: Arte8bits 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
Título: Re: Protothreads, un mini RTOS 100% C
Publicado por: fram_22 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
Título: Re: Protothreads, un mini RTOS 100% C
Publicado por: RICHI777 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 !
Título: Re: Protothreads, un mini RTOS 100% C
Publicado por: reiniertl 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
Título: Re: Protothreads, un mini RTOS 100% C
Publicado por: KALLITOS 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
Título: Re: Protothreads, un mini RTOS 100% C
Publicado por: reiniertl 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