- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在Arduino中使用ProtoThread创建多线程系统
原文地址: /thread-610-1-1.html 一个非常强大的多任务库,非常适合arduino这种资源非常有限的单片机优点1、超轻量级,他的库基本上都是些宏定义,大小可以忽略不计,而且每个线程只占用2个字节2、无机器码,纯c实现,所以可移植性很好3、无堆栈4、简单使用可以只把他当个调度程序,复杂点也能把他当操作系统来使PT作者的首页http://www.sics.se/~adam/pt/先上一段简单的代码look look #include pt.h static int counter1,counter2,state1=0,state2=0; static int protothread1(struct pt *pt) {?? ??PT_BEGIN(pt);?? ??while(1) ??{?? ? ? PT_WAIT_UNTIL(pt, counter1==1); ? ? digitalWrite(12,state1); ? ? state1=!state1; ? ? counter1=0;? ? ??} ??PT_END(pt); } static int protothread2(struct pt *pt) { ??PT_BEGIN(pt); ??while(1) {? ? ? ? PT_WAIT_UNTIL(pt, counter2==5); ? ? counter2=0; ? ? digitalWrite(13,state2); ? ? state2=!state2; ??} ??PT_END(pt); } static struct pt pt1, pt2; void setup() { ??pinMode(12,OUTPUT); ??pinMode(13,OUTPUT); ??PT_INIT(pt1); ??PT_INIT(pt2); } void loop () { ? ? protothread1(pt1); ? ? protothread2(pt2); ? ? delay(1000); ? ? counter1++; ? ? counter2++; ??} 复制代码 此段代码演示了如何使用PT库来实现12、13脚led分别隔1秒、5秒闪烁,已经在arduino09上测试通过sorry,无注释。。别急,这只是个演示这篇文章会不断更新,分别讲述PT库的原理和应用让大家能开发出更复杂的程序好介绍开始了~Protothread是专为资源有限的系统设计的一种耗费资源特别少并且不使用堆栈的线程模型,其特点是:??◆ 以纯C语言实现,无硬件依赖性;??◆ 极少的资源需求,每个Protothread仅需要2个额外的字节;??◆ 可以用于有操作系统或无操作系统的场合;??◆ 支持阻塞操作且没有栈的切换。使用Protothread实现多任务的最主要的好处在于它的轻量级。每个Protothread不需要拥有自已的堆栈,所有的Protothread 共享同一个堆栈空间,这一点对于RAM资源有限的系统尤为有利。相对于操作系统下的多任务而言,每个任务都有自已的堆栈空间,这将消耗大量的RAM资源,而每个Protothread仅使用一个整型值保存当前状态。??咱们来结合一个最简单的例子来理解ProtoThreads的原理吧,就拿上面的闪烁灯代码来说 #include pt.h//ProtoThreads必须包含的头文件 static int counter1,counter2,state1=0,state2=0; //counter为定时计数器,state为每个灯的状态 static int protothread1(struct pt *pt) //线程1,控制灯1 {?? ??PT_BEGIN(pt);??//线程开始 ??while(1) //每个线程都不会死 ??{?? ? ? PT_WAIT_UNTIL(pt, counter1==1); //如果时间满了1秒,则继续执行,否则记录运行点,退出线程1 ? ? digitalWrite(12,state1); ? ? state1=!state1;//灯状态反转 ? ? counter1=0; //计数器置零 ??} ??PT_END(pt); //线程结束 } static int protothread2(struct pt *pt) //线程2,控制灯2 { ??PT_BEGIN(pt); //线程开始 ??while(1) {? ? //每个线程都不会死 ? ? PT_WAIT_UNTIL(pt, counter2==5); //如果时间满了5秒,则继续执行,否则
您可能关注的文档
- 加拿大农业和自然资源英文agriculture and natural resources.pptx
- 九年级上UNIT 2 I think that mooncakes are delicious!.ppt
- 经贸英语Unit 10.ppt
- 数学中得英语表达.ppt
- Accurate delivery advertising English 精准推送英文版.ppt
- 第三章 反应性高分子3.ppt
- DS_C_G_3_栈队串.ppt
- 学术英语(人文社科类)Unit 5.ppt
- 英语论文中 文献引用的最权威教程.pptx
- 英语时态复习.pptx
- 2025年四川省阿坝州红原县某国企外包岗位招聘10人笔试备考题库及答案详解1套.docx
- 2025年四川省阿坝州红原县某国企外包岗位招聘10人笔试备考题库及参考答案详解1套.docx
- 2025年四川省阿坝州理县某国企外包岗位招聘10人笔试备考题库带答案详解.docx
- 2025年四川省阿坝州若尔盖县某国企外包岗位招聘10人笔试备考题库及答案详解1套.docx
- 2025年四川省阿坝州红原县某国企外包岗位招聘10人笔试备考题库及参考答案详解.docx
- 2025年四川省阿坝州若尔盖县某国企外包岗位招聘10人笔试备考题库参考答案详解.docx
- 2025年四川省阿坝州理县某国企外包岗位招聘10人笔试备考题库含答案详解.docx
- 2025年四川省阿坝州理县某国企外包岗位招聘10人笔试备考题库及答案详解一套.docx
- 基于单片机电机控制系统设计.docx
- 2025年四川省阿坝州红原县某国企外包岗位招聘10人笔试备考题库参考答案详解.docx
文档评论(0)