pt.h中所定义的:
pt_sem.inc中所引入的:
PT_timer.h(来自)中所定义的: 定义对象: PT_timer t; 对象调用方法
pt.h:
#include <pt.h>
static struct pt First,Seconde;//创建两个线程任务
void setup()
{
PT_INIT(&First);
PT_INIT(&Seconde);//初始化两个任务
}
static int thread1(struct pt *pt)//建立任务描述的主题函数
{
PT_BEGIN(pt);
while(1)
{
循环内主体内容
}
循环外内容
PT_END(pt)
}
void loop()
{
thread1(&First);
thread2(&Seconde);//调用线程函数
}
PT_timer.h
#include <PT_time.h>
void setup()
{
无需初始化
}
void loop()
{
调用PT_timer方法即可
}
PT_sem.inc
#define PT_USE_SEM
static struct pt_sem name_of_semaphore;
void setup()
{
PT_SEM_INIT(&name_of_semaphore,num)
}
void loop()
{
调用PT_SEM方法即可
}
源自这里
#include<pt.h>//声明protothread
#include<PT_timer.h>//声明pt.timer
#define ANGEROFWIFE 1//老婆的愤怒
#define MOTHERCALL 2//老母的呼唤
#define KNEE 3//遭殃的膝盖
#define HAND 4//幸福的双手
static struct pt pt1,pt2;
PT_timer servotimer1;
PT_timer servotimer2;//定义两个计时器
void setup()
{
pinMode(ANGEROFWIFE,INPUT);
pinMode(MOTHERCALL,INPUT);
pinMode(KNEE,OUTPUT);
pinMode(HAND,OUTPUT);//定义端口输入输出
PT_INIT(&pt1);
PT_INIT(&pt2);//两个线程初始化,其实就是pt->lc归零
}
static int mission1(struct pt *pt)
{
PT_BEGIN(pt);//线程开始
while(1)
{
digitalWrite(KNEE,LOW);//老婆不生气我不跪
PT_WAIT_UNTIL(pt,digitalRead(ANGEROFWIFE));//等老婆生气
digitalWrite(KNEE,HIGH);//我擦真生气了,赶紧跪
servotimer1.setTimer(10000);//设定跪10秒,这里单位1为一微妙
PT_WAIT_UNTIL(pt,(servotimer1.Expired()));//当时间溢出,这里是10秒就结束
}
PT_END(pt);//线程结束
}
Static int mission2(struct pt *pt)
{
PT_BEGIN(pt);
While(1)
{
digitalWrite(HAND,LOW);
PT_WAIT_UNTIL(pt,digitalRead(MOTHERCALL));
digitalWrite(HAND,HIGH);
servotiemr2.setTimer(15000);
PT_WAIT_UNTIL(pt,(servotimer2.Expired()));
}
PT_END(pt);
}
void loop()
{
mission1(&pt1);
mission2(&pt2);//循环执行,特步,永不停息
}
最后再给一个链接,这是一个不错的对ProtoThread的描述的地址。