1.简介
-
pt-thread 是一种名称为protothreads的新型抽象编程模型的简称。主要设计用于内存受限严重的嵌入式系统,实际上在MCU裸机编程中,我们经常使用状态机模型去编写这种运行在MCU上的事件驱动程序。而 pt-thread 的最大优点是允许我们使用一种不消耗堆栈并且类似线程的风格代替状态机风格的代码。
-
pt-thread 是作者Adam Dunkels在开源BSD协议许可下发布,允许用于商业、非商业用途,商用时可能需要申请相关license。
-
相关特性:
- 纯C语言编写,不依赖硬件
- 每个抽象的线程结构体只占2byte
- 支持阻塞操作,并且没有堆栈的切换
- 支持裸机 \ OS
2.移植
- 通过链接http://dunkels.com/adam/pt/download.html进行下载相关版本的ptthread库
- 以 pt-1.4 版本的使用为例,只需要下载后将下面几个关键文件导入工程中,include "pt.h"之后就能直接使用相关接口
3.使用方法
下面例程主要使用两个任务的调度轮转来展示 PT-Thread 的一般用法
任务A:通过按键中断触发,优先级高可阻塞任务B
任务B:长时间运行,但是优先级低,会被任务A阻塞
#include "gpio.h"
#include "irq.h"
#include "pt.h"
unsigned char taskA_flag, taskB_flag = 0;
void irq_handler (void)
{
unsigned int irq = irq_type_get();
if (irq == GPIO_IRQ)
{
if (0 == gpio_read(KEY_PIN))
{
delay_ms(10); //消抖
if (0 == gpio_read(KEY_PIN))
{
while (0 == gpio_read(KEY_PIN)) // 等待释放
taskA_flag = 1;
taskB_flag = 0; // 阻塞任务B
}
}
}
}
static
PT