项目简介
本项目基于Adam Dunkels的Protothreads库扩展开发,借助pt - timer和pt - signal实现轻量级多线程编程方案。主要解决单线程任务处理的阻塞问题,使多个任务能在无竞争环境中并行工作,提升程序执行效率和性能。项目包含基础pt库、pt - timer扩展、pt - signal扩展及示例程序,适用于嵌入式系统、微控制器、资源受限环境及快速响应场景。
项目的主要特性和功能
主要特性
- 协程支持多线程,任务间无竞争。
- 采用简单的控制流指令,如PT_YIELD。
- 具备时间触发和任务间通信机制。
主要功能
- 通过协程管理多任务处理,每个任务有独立的代码流和控制权。
- 利用pt - timer实现任务延时处理。
- 借助pt - signal实现任务间通信和同步。
安装使用步骤(假设用户已经下载了本项目的源码文件)
基于“switch - case”技巧(缺省)
- 将lc.h、lc - switch.h、pt.h拷到项目文件夹;若在Arduino平台,可将整个解压缩后的目录changer_pt _for_arduino,拷贝到文件夹C:\Users\ch\Documents\Arduino\libraries(WIN7系统)。
- 项目文件中添加
#include "pt.h"
。
基于gcc的标签指针
- 准备lc.h、lc - addrlabel.h、pt.h三个文件。
- 用户程序在
#include "pt.h"
之前,加入#define lc_include "lc - addrlabels.h"
。
使用信号量
在包含pt.h之前加入#define PT_USE_SEM
。
使用等延时
在包含pt.h之前加入#define PT_USE_TIMER
。
使用等信号标志
在包含pt.h之前加入#define PT_USE_SIGNAL
。
通用步骤
- 定义协程任务函数,函数返回char类型,并使用struct pt作为参数,如
PT_THREAD(myTask(struct pt *pt)) { ... }
,可在函数内使用该指针发送信号或设置定时器。 - 程序初始化时,使用
PT_INIT
初始化协程任务变量,并在需要处使用PT_BEGIN
启动任务。 - 根据需求在任务中使用
PT_WAIT_MS
、PT_WAIT_US
进行延时等待,使用PT_WAIT_SIGNAL
等待信号标志。 - 编译并运行程序,根据实际环境配置编译选项和链接选项。若遇到问题,可参考相关文档和教程解决。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】