PT-Thread的使用教程

PT-Thread是一种适合内存受限嵌入式系统的protothreads编程模型,它以纯C编写,占用资源少,支持阻塞操作。本文介绍了PT-Thread的移植、使用方法,包括任务调度和信号量接口的基础用法,以及其实现原理,通过示例展示了如何在MCU上实现任务A和任务B的切换。
摘要由CSDN通过智能技术生成

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
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值