当前位置: 首页 > 软件库 > 程序开发 > 常用工具包 >

Protothreads

C 语言封装的轻量线程环境
授权协议 BSD
开发语言 C/C++
所属分类 程序开发、 常用工具包
软件类型 开源软件
地区 不详
投 递 者 越望
操作系统 嵌入式
开源组织
适用人群 未知
 软件概览

Protothreads 是一种针对 C 语言封装后的宏函数库,为 C 语言模拟了一种无堆栈的轻量线程环境,能够实现模拟线程的条件阻塞、信号量操作等操作系统中特有的机制,从而使程序实现多线程操作。

每个 Protothreads 线程仅增加 10 行代码和 2 字节RAM的额外硬件资源消耗。对于资源紧缺而不能移植嵌入式操作系统的嵌入式系统,使用 Protothreads 能够方便直观地设计多任务程序,能够实现用线性程序结构处理事件驱动型程序和状态机程序,简化了该类程序的设计。

示例代码:

#include "pt.h"
 
struct pt pt;
struct timer timer;
 
PT_THREAD(example(struct pt *pt))
{
  PT_BEGIN(pt);
 
  while(1) {
    if(initiate_io()) {
      timer_start(&timer);
      PT_WAIT_UNTIL(pt,
         io_completed() ||
         timer_expired(&timer));
      read_data();
    }
  }
  PT_END(pt);
}


  • 状态机——Protothreads 宗旨:技术的学习是有限的,分享的精神是无限的。 一、prothreads的优缺点 优点:     1. 以纯C语言实现,无硬件依靠性;因此不存在移植的困难。     2. 极少的资源需求,每个Protothread仅需要2个额外的字节; 3. 支持阻塞操纵且没有栈的切换。 缺点:     1. 函数中不具备可重入型,不能使用局部变量;     2. 按顺序判断各

  • Protothreads:一个“蝇量级” C 语言协程库 协程(coroutine)顾名思义就是“协作的例程”(co-operative routines)。跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程技巧。实际上协程的概念比线程还要早,按照 Knuth 的说法“子例程是协程的特例”,一个子例程就是一次子函数调用,那么实际上协程就是类函数一样

  • Protothreads极轻量级系统用于资源紧张的单片机。 Ptotothreads的作者是Adam Dunkels <adam@sics.se>,很感谢作者给我们提供这样一个好的系统,我认为合适的才是最好的。 作者描述Protothreads的特性是: 1 没有专用的机器代码,纯C实现; 2 不使用容易犯错的跳转指令; 3 极小的内存占用; 4 当不当做操作系统来用都行; 5 所提供的阻断等待不

  • Protothreads极轻量级系统用于资源紧张的单片机。 Ptotothreads的作者是Adam Dunkels ,很感谢作者给我们提供这样一个好的系统,我认为合适的才是最好的。 作者描述Protothreads的特性是: 1 没有专用的机器代码,纯C实现; 2 不使用容易犯错的跳转指令; 3 极小的内存占用; 4 当不当做操作系统来用都行; 5 所提供的阻断等待不需要堆栈或者full mul

  • ProtoThreads ProtoThreads是一个宏封装库,通过编程技巧完成了对常见线程管理的模拟,所有的操作都使用宏完成。 重要技巧—— __LINE__语句的使用,巧妙地完成了“线程”中阻塞位置的标记; 配合pt-switch.h中的switch-case语句展开后,二次进入线程执行,不影响循环/判断等程序块底部的跳转。即:二次进入由case __LINE__: 处开始执行,执行到块尾(

  • https://coolshell.cn/articles/10975.html 协程(coroutine)顾名思义就是“协作的例程”(co-operative routines)。跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程技巧。实际上协程的概念比线程还要早,按照 Knuth 的说法“子例程是协程的特例”,一个子例程就是一次子函数调用,那么

  • Protothreads:背后的真相! 原文出处:http://dunkels.com/adam/pt/expansion.html Under the hood How protothreads really work What goes on behind the magical macros in the C protothreads library? Why are they macros

  • 原文地址:https://www.linuxidc.com/Linux/2012-07/66395p2.htm 协程的好处不用再多说,作为与函数调用/返回相对的概念,它使我们思考问题的方式经历一场变革。现在我们关注的是C,由于C本身的特质,将协程引入其中将会是一 个挑战。无数先驱已经为这个目标抛了头颅洒了热血,于是我们有了libtask之类。而这里提到的,是一个堪称最轻量级的协程实现:Protot

  • Protothreads 和 FreeRTOS Coroutine 的对比 Protothreads 和 FreeRTOS Coroutine 都实现了协程(Coroutine),但在实现的具体细节上是有很大的区别的,这里做个对比,以便做选择。 https://blog.csdn.net/zoomdy/article/details/89947989 mingdu.zheng at gmail d

  • 想象一个情景—— 一个四位的数码管,由于要“同时”显示,因此每5ms刷新一次。 同时要处理一个矩阵键盘,设计是每10ms扫描一行,同时还有去抖处理,需要在检测到按键后再延时40ms检查一次。 检测到有效按键,在数码管上显示某个值,比如1234。 同时还能从串口接收数据,如果有数据收到,马上在数码管上显示某个值,比如5678,停留1s,期间按矩阵键盘不会有任何反应。 程序怎么写? 比如说,去抖的时候

 相关资料
  • 主要内容:使用普通函数创建 goroutine,使用匿名函数创建goroutine在编写 Socket 网络程序时,需要提前准备一个线程池为每一个 Socket 的收发包分配一个线程。开发人员需要在线程数量和 CPU 数量间建立一个对应关系,以保证每个任务能及时地被分配到 CPU 上进行处理,同时避免多个任务频繁地在线程间切换执行而损失效率。 虽然,线程池为逻辑编写者提供了线程分配的抽象机制。但是,如果面对随时随地可能发生的并发和线程处理需求,线程池就不是非常直观和方便了。能否

  • Go 语言支持以下系统: Linux FreeBSD Mac OS X(也称为 Darwin) Window 安装包下载地址为:https://golang.org/dl/。 如果打不开可以使用这个地址:https://golang.google.cn/dl/。 各个系统对应的包名: 操作系统 包名 Windows go1.4.windows-amd64.msi Linux go1.4.linux

  • 没有标记语言就没有Web和丰富多彩的互联网,但创造了Web的HTML语言并非尽善尽美,存在诸如难读、难写、难以向其他格式转换的问题。究其根源是因为HTML语言是一种“重”标记语言,对机器友好而并非对人友好。 下面这段HTML源码,非技术控阅读起来会遇到困难。 <html> <head> <meta content='application/xhtml+xml;charset=utf-8' ht

  • 在常用的并发模型中,多进程、多线程、分布式是最普遍的,不过近些年来逐渐有一些语言以first-class或者library的形式提供对基于协程的并发模型的支持。其中比较典型的有Scheme、Lua、Python、Perl、Go等以first-class的方式提供对协程的支持。 同样地,Kotlin也支持协程。 本章我们主要介绍: 什么是协程 协程的用法实例 挂起函数 通道与管道 协程的实现原理 c

  • 在Go语言中封装就是把抽象出来的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只能通过被授权的方法,才能对字段进行操作。 封装的好处: 隐藏实现细节; 可以对数据进行验证,保证数据安全合理。 如何体现封装: 对结构体中的属性进行封装; 通过方法,包,实现封装。 封装的实现步骤: 将结构体、字段的首字母小写; 给结构体所在的包提供一个工厂模式的函数,首字母大写,类似一个构造函数; 提供

  • 问题内容: 我正在尝试在多线程环境中对int变量进行经典的递增/递减。这是我的示例代码。 尽管我对所有三个线程都使用了join()方法,但结果仍然不一致。在这里加入不是意味着主线程要等到每个线程都完成执行吗?我什至尝试将同步添加到三个方法签名中的每个;但是我得到不一致的结果。 除了使用该变量的Atomic版本外,我还能如何确保始终获得0? 问题答案: 您的SyncCounter根本不是线程安全的。

  • 主要内容:Windows安装,Linux安装本节我们来学习如何在各个平台上安装和配置R语言开发环境。 Windows安装 您可以从R-3.4.1 for Windows(32/64位)下载Windows的Windows安装程序版本,并将其保存在本地目录中。 打开下载页面如下所示 - 因为它是Windows安装程序(),下载的名称为“R-3.4.1-win.exe”。只需双击并运行接受默认设置的安装程序即可。 如果您的Windows是位版本,

  • 问题内容: 我用来将货币从BigDecimal格式化为字符串。按预期工作,问题在于我们的主要目标是荷兰市场,而默认的荷兰格式很奇怪。 让我解释一下,当格式化-125时,荷兰语将得到“€125-”(预期为“-€125”)。英国按预期方式提供“-£125.50”。 我可以检查语言环境是否为荷兰语,然后在每次我要设置小数格式时都提供一个模式。但是我更喜欢一个解决方案,它可以覆盖荷兰的格式设置。我在考虑以