ProtoThread编程技术简介

Protothread是由Adam Dunkels发明的一种编程技术,用于实现轻量级的线程控制,常见于资源受限的嵌入式系统。它是uip、lwip和contiki等项目的基础,特别适用于8位或16位MCU。本文介绍了Protothread的起源、原理及在开源项目中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在介绍protothread前,我们先了解下他的作者,瑞典计算机科学院(SICS)大名鼎鼎的:Adam Dunkels,他是uip,lwip,contiki的作者,他还成立了公司,专门做物联网相关的产品。lwip就不介绍了,开源的轻量级TCP/IP协议栈,使用的非常广泛;但是它比uip网络协议栈要复杂的多,uip属于精简版的以太网网络协议栈,作者在写这个uip时,为了解析各种网络栈协议,就发明了protothread,这个翻译过来就是:原始线程等意思;后来uip被合并到contiki维护了,自然地protothread也就代入到了contiki中,contiki是一个开源的,占用资源极小的RTOS,一般用在资源紧缺的8位或16位MCU中,contiki中的线程模型就是protothread实现的。

一、protothread是什么

简单来说,它就是一种编程技术,具体来说就是采用下面的代码来实现switch case语句的控制跳转。有人认为它是状态机,也有人认为它是协程,我理解它就是一种编程技术,具体起什么名字,我就不纠结啦。

typedef unsigned short lc_t;

#define LC_INIT(s) s = 0;

#define LC_RESUME(s) switch(s) { case 0:

#define LC_SET(s) s = __LINE__; case __LINE__:

#define LC_END(s) }

二、protothread的源代码

1、源码首先可以在uip的源码中找到,是比较老了,最新的代码可以在contiki或contiki-ng中找到,这2份代码中的protothread代码是一样的,用哪个都行

2、美国康纳尔大学的ECE4760课程对protothread源码进行了升级、改造,也可以学习

三、学习资料

1、Adam Dunkels的个人主页:http://dunkels.com/adam/

2、contiki地址:http://www.contiki-os.org/support.html

3、contiki-ng地址:https://github.com/contiki-ng/contiki-ng

4、uip地址:https://github.com/adamdunkels/uip

5、ECE4760课程对protothread的改进:http://people.ece.cornell.edu/land/courses/ece4760/PIC32/index_Protothreads.html

注:以上纯属个人理解,不对之处请指出,大家一起交流学习。

2020-03-05@北京

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值