Problema al compilar código con "protothreads". [SOLUCIONADO]

Buenos días muchachos.

Buscando posibles soluciones para un proyecto que estaba encarando, me encontré con los "protothreads". Me parece una herramienta que puede ser utilísima, peeero... No logro compilar mi código.

La librería fue desarrollada por Adam Dunkels y está disponible en su sitio personal o en el administrador de librerías del IDE de ARduino.

El tutorial que seguí es el siguiente blinkea 3 leds conectados a los pines 7, 8 y 9 a distintas velocidades. Pueden verlo en:

y el código del ejemplo es:

#include <pt.h>

struct pt hilo1;
struct pt hilo2;
struct pt hilo3;

void setup() {
  PT_INIT(&hilo1);
  PT_INIT(&hilo2);
  PT_INIT(&hilo3);
}

void loop() {
  parpadeo(&hilo1);
  parpadeo(&hilo2);
  parpadeo(&hilo3);
}

void parpadeo(struct pt *pt) {
  PT_BEGIN(pt);
  // void setup() {
  static long t = 0;
  pinMode(10, OUTPUT);
  // }
  
  do {
  // void loop() {
    digitalWrite(10, HIGH);
    t = millis();
    PT_WAIT_WHILE(pt, (millis()-t)<1000);
    
    digitalWrite(10, LOW);
    t = millis();
    PT_WAIT_UNTIL(pt, (millis()-t)>=1000);
  // }
  } while(true);
  PT_END(pt);
}

void parpadeo2(struct pt *pt) {
  PT_BEGIN(pt);
  // void setup() {
  static long t = 0;
  pinMode(9, OUTPUT);
  // }
  
  do {
  // void loop() {
    digitalWrite(9, HIGH);
    t = millis();
    PT_WAIT_WHILE(pt, (millis()-t)<500);
    
    digitalWrite(9, LOW);
    t = millis();
    PT_WAIT_UNTIL(pt, (millis()-t)>=500);
  // }
  } while(true);
  PT_END(pt);
}

void parpadeo3(struct pt *pt) {
  PT_BEGIN(pt);
  // void setup() {
  static long t = 0;
  pinMode(8, OUTPUT);
  // }
  
  do {
  // void loop() {
    digitalWrite(8, HIGH);
    t = millis();
    PT_WAIT_WHILE(pt, (millis()-t)<250);
    
    digitalWrite(8, LOW);
    t = millis();
    PT_WAIT_UNTIL(pt, (millis()-t)>=250);
  // }
  } while(true);
  PT_END(pt);
}

Cuestión que cuando quiero verificarlo me tira una serie de errores (adjunto un txt con el resultado de la salida por si alguien le quiere echar una ojeada).

exit.txt (38.7 KB)

Bueno... Actualizo un poco el tema...

Agarré una notebook vieja en la que tengo W7, y probé el código ahí. Los errores cambiaron (estaban mal nombradas las funciones) y luego de corregirlos compiló y corre perfecto. Luego al intentar compilar ese mismo código en mi Linux vuelve a arrojar varios errores... Ya voy a ver cómo corregirlos pero por lo menos ya sé dónde está el problema.

Dejo el código corregido por si a alguien le interesa.

#include <pt.h>

struct pt thread1;
struct pt thread2;
struct pt thread3;

void setup() {
  PT_INIT(&thread1);
  PT_INIT(&thread2);
  PT_INIT(&thread3);
}

void loop() {
  blink1(&thread1);
  blink2(&thread2);
  blink3(&thread3);
}

void blink1(struct pt *pt){
  PT_BEGIN(pt);
  static long t = 0;
  pinMode(10, OUTPUT);
  do{
    digitalWrite(10, HIGH);
    t = millis();
    PT_WAIT_WHILE(pt, (millis()-t)<2000);

    digitalWrite(10, LOW);
    t = millis();
    PT_WAIT_UNTIL(pt, (millis()-t)>2000);
  } while(true);
  PT_END(pt);
}

void blink2(struct pt *pt){
  PT_BEGIN(pt);
  static long t = 0;
  pinMode(9, OUTPUT);
  do{
    digitalWrite(9, HIGH);
    t = millis();
    PT_WAIT_WHILE(pt, (millis()-t)<1000);

    digitalWrite(9, LOW);
    t = millis();
    PT_WAIT_UNTIL(pt, (millis()-t)>1000);
  } while(true);
  PT_END(pt);
}

void blink3(struct pt *pt){
  PT_BEGIN(pt);
  static long t = 0;
  pinMode(8, OUTPUT);
  do{
    digitalWrite(8, HIGH);
    t = millis();
    PT_WAIT_WHILE(pt, (millis()-t)<500);

    digitalWrite(8, LOW);
    t = millis();
    PT_WAIT_UNTIL(pt, (millis()-t)>500);
  } while(true);
  PT_END(pt);
}

`Bueno, me resultó muy interesante pero al ver que la librería original decía 2006 me dije... por acá tendremos muchos problemas.

Asi que de casualidad busqué en el Administrador de Librerías del IDE y me encuentro con Protothreads y cuando miro More Info dice que fue actualizada hace 2 semanas.
Descargué, probé el/los ejemplos y 0 problemas.

Protothreads actualizado