官网:http://dunkels.com/adam/pt/index.html

1. 举例说明

ptthread 有两种运行任务的方式,一种是switch,另一种是goto。这里使用的是switch,在lc.h文件中包含相应头文件即可。#include “lc-switch.h”

//PT_BEGIN(p);
{ char PT_YIELD_FLAG = 1; //LC_RESUME((pt)->lc)switch(p->lc) { case 0:;//PT_YIELD(p);do {                        PT_YIELD_FLAG = 0;             //LC_SET((pt)->lc);p->lc = __LINE__; case __LINE__:              if(PT_YIELD_FLAG == 0) {          return PT_YIELDED;          }                       } while(0);//PT_END(p);//LC_END((pt)->lc); };PT_YIELD_FLAG = 0; p->lc = 0;//PT_INIT(pt); return PT_ENDED;
}

2. 代码解释

  • PT_BEGIN( p ); PT_YIELD( p ); PT_END( p );这三个宏是使用pt任务时最基础的3条语句,依次的意思是任务开始,任务挂起,任务结束。

  • PT_BEGIN( p ):开始运行,如果p->lc是0,则按顺序往下运行。如果p->lc不为0则跳到相应的case语句中运行(这种情况发生在上一次任务调用了PT_YIELD处于挂起状态)。

  • PT_YIELD( p ):将p->lc的值改为当前行数,退出当前任务(挂起任务)。下次进来任务就会直接跳到当前的case运行,往下运行代码(因为PT_YIELD_FLAG !=0 )。

  • PT_END( p ):首先是呼应PT_BEGIN§中的switch的大括号}; 然后就清除相关变量等等,下一次任务就又是重头开始。

3. 建议

直接看代码比较绕,可以看预编译后的代码,即将宏展开后的代码,还是比较容易理解的。

pt-thread的使用相关推荐

  1. 一个“蝇量级” C 语言协程库

    协程(coroutine)顾名思义就是"协作的例程"(co-operative routines).跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻 ...

  2. 状态机——protothreads

    状态机--Protothreads 宗旨:技术的学习是有限的,分享的精神是无限的. 一.prothreads的优缺点 优点: 1. 以纯C语言实现,无硬件依靠性:因此不存在移植的困难. 2. 极少的资 ...

  3. process调用protothread机制的相关宏定义——用HelloWorld进程诠释

    一.HelloWorld例子 #include "contiki.h"#include <stdio.h> /* For printf() */ /*--------- ...

  4. FreeRTOS基础以及UIP之协程--C语言剑走偏锋

    在FreeRTOS中和UIP中,都使用到了一种C语言实现的多任务计数,专业的定义叫做协程(coroutine),顾名思义,这是一种协作的例程, 跟具有操作系统概念的线程不一样,协程是在用户空间利用程序 ...

  5. 膜态沸腾UDF【转载】

    膜态沸腾的UDF,添加注释.其中获取VOF梯度的方法详见前面的日志,其中很多宏无法通过UDF手册查阅, 蒸汽相中的质量源项的一般形式为: 式中: 通过一阶近似,热流之差可表达为: 式中: 通过此近似, ...

  6. contiki学习笔记(七)contiki系统

    八.contiki进程 contiki编程的核心文档 contiki的一个进程由一个单一的原线程组成. Files file process.c contiki进程内核的实现. file proces ...

  7. OSError: exception: access violation writing,

    在使用python3.5_x64,ctype调用c++的.so文件时持续出现了OSError: exception: access violation writing 0x....... 的问题.定位 ...

  8. contiki学习笔记(十)隐式网络时间同步、protothreads

    十三.隐式网络时间同步 这个粗糙而简单的网络时间同步模块对网络中所有节点的时钟进行同步. Files file timesynch.cA simple time synchronization mec ...

  9. 小码哥底层班学习笔记大纲

    iOS 逆向学习笔记 day1 使用 ssh 远程登录到手机上 day2 使用 usbmuxd 通过端口映射连接到手机上(多个端口映射可用" " 分隔) 使用 sh 脚本在终端执行 ...

  10. 一个LED的N种玩法--多线程

    一个LED的N种玩法--多线程 Author: chenzhufly Email: chenzhufly@126.com 2010-05-04 这篇我将来玩玩多线程操作,体会一下其中的乐趣.实际上这也 ...

最新文章

  1. 在图像生成领域里,GAN这一大家族是如何生根发芽的
  2. java 物理地址_java中的==与equals的区别是什么,什么是物理地址?
  3. Git使用教程之本地仓库的基本操作
  4. Spring Boot如何实现在线预览?这个开源项目可以学习一下,支持99%常用文件!...
  5. HTTPS Web配置举例
  6. 用DriverStudio开发USB驱动程序
  7. SpringBoot 上传多个文件
  8. mem库系列函数合集(memset、memchr、memcmp、memcpy)
  9. 跳過 Windows RT的UI
  10. 想作为程序员工作 需要什么_您不想作为程序员玩的游戏
  11. html5多颜色灯笼旋转,HTML5 Canvas 漂亮的斑马条纹灯笼
  12. [C++] - 闭包(closure)
  13. angularjs过滤器(number)
  14. jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!)
  15. PLSQL使用SYSTEM用户连接报错:ORA-01031: insufficient privileges
  16. 云南省工信厅洪正华一行莅临红谷滩区·高通中国·影创联合创新中心考察调研
  17. js通过pako压缩数据后java解压数据
  18. 揭秘山寨手机“四寨主”:都高仿苹果iPhone
  19. 操作系统-课堂笔记-磁盘调度(南航)
  20. 关于计算机上使用的光盘,电脑中使用Windows DVD Maker制作光盘的方法

热门文章

  1. 计算机网络多元化媒体传达,网页版式设计的特征及其视觉元素
  2. Centos7下mysql安装详解
  3. 解决 This request has been blocked; this endpoint must be available over WSS.
  4. 面试题:微信聊天窗口发送好友200以内字符消息设计测试用例
  5. [精通ROS机器人编程]在RViz中可视化机器人3D模型,GUI界面没有正常显示机械结构
  6. 88个国外音乐网站推荐
  7. C++ 返回引用与返回值区别
  8. 【2018慢性病与信息大会】孔飞:信息交互在智能健康中的应用
  9. html简单登录页面制作
  10. 产品上架后,亚马逊运营应该做什么