搜索
bottom↓
回复: 23

推荐8位机使用protothreads做为调度程序!

[复制链接]

出0入0汤圆

发表于 2010-2-12 13:25:59 | 显示全部楼层 |阅读模式
在产品上使用了,效果很好,占用资源小。
搜索站内,有朋友介绍了。
现在版本pt 1.4

出0入89汤圆

发表于 2010-2-12 15:18:15 | 显示全部楼层
我也觉得这个很好,希望pt能被大多数人使用

出0入0汤圆

发表于 2010-2-14 15:05:15 | 显示全部楼层
多谢!!!

出0入0汤圆

发表于 2010-3-13 14:02:17 | 显示全部楼层
很省CPU啊。。。用起来不错。我再试几个例子看看

出0入0汤圆

发表于 2010-3-13 14:04:59 | 显示全部楼层
不错

出0入0汤圆

发表于 2010-3-13 14:16:02 | 显示全部楼层
ding

出0入0汤圆

发表于 2010-6-21 11:30:34 | 显示全部楼层
顶,感觉还可以,不过好像gcc支持得不好。

出0入0汤圆

发表于 2010-6-21 11:55:13 | 显示全部楼层
如果内存不紧张,完全没必要用Coroutine/ProtoThread。这个使用起来限制比较多。

当然,拿来控制状态机/程序流程是很好的东西。

出0入0汤圆

发表于 2010-6-21 12:32:51 | 显示全部楼层
回复【7楼】dr2001
如果内存不紧张,完全没必要用coroutine/protothread。这个使用起来限制比较多。
当然,拿来控制状态机/程序流程是很好的东西。
-----------------------------------------------------------------------

如果内存不紧张,那用什么?

出0入0汤圆

发表于 2010-6-21 12:49:18 | 显示全部楼层
回复【8楼】eworker
-----------------------------------------------------------------------

如果内存不紧张,那用什么?

用操作系统

出0入0汤圆

发表于 2010-6-21 13:23:36 | 显示全部楼层
回复【8楼】eworker  
-----------------------------------------------------------------------

OS。或者独立堆栈的Thread。

出0入0汤圆

发表于 2010-7-14 15:19:24 | 显示全部楼层
对于资源小的CPU来说,protothread是难得的珍品,非常值得一用。

它的原理简单了极致,资源消耗小到极致,但是又真实的实现了多任务的编程框架。

不过,我在使用过程中,感觉原型的protothread有个不是很方便的地方,就是没有直接延时的函数,总要为线程显式创建一个Timer,然后在线程里面PT_TimerSet,PT_WAIT_UNTIL,编程不直观,为什么不直接设置一个WaitX函数,直接延时多少毫秒,不是更简单吗?

以下为我自己扩展的几个宏,实现了这种“通用的”延时函数,便于简化函数编写。
其基本原理就是在线程里面创建一个static静态的timer,然后名称统一为tmr,线程里面的WaitX函数实际上就用这个tmr。

另外,原来的结构中,线程函数无法被其他线程调用,我定义了PT_CALL宏,可以在一个线程函数中,调用另外一个线程函数。

#define Wait(s,t)    {\
PT_TimerSet((s), (t));  \
PT_WAIT_UNTIL(pt, PT_TimerExpired(s));  \
}

#define WaitX(t)   Wait(&tmr,t)
#define _SS  PT_BEGIN(pt); PT_INIT(pt); static PT_TMR_Create(tmr);
#define _EE  PT_END(pt);

#define PT_CALL(x)  {\
Wait(&tmr,0)  \
int k; \
while(1) {  \
     k=(x)(&PT_TCB(x));\
     if (k==PT_ENDED) break; \
     return k;\
}\
}

//-使用以上宏的线程,感觉比原来的更简单了-------------------
extern PT_TSK_Create(myfun1);  //myfun1也是一个pt线程

PT_TSK_Create(protothread2);
unsigned char protothread2(struct pt *pt)
{
  static int i;
_SS
  i=1;
  while(i++<=3) PT_CALL(myfun1);
  while(1)
  {
      WaitX(200);
      Form1->Memo1->Lines->Add("this is 2");
  }
_EE
}
//-------------------------------------------------

出0入0汤圆

发表于 2010-7-14 15:24:15 | 显示全部楼层
实际上,只需极简单的修改,Protothread就可以实现抢占式多任务,协同和抢占式任务也可以同时存在。

基本方法就是把抢占式任务放定时中断里执行。

出0入0汤圆

发表于 2010-10-29 15:19:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-6-27 09:28:29 | 显示全部楼层
markmarkmarkmarkmark

出0入0汤圆

发表于 2012-11-17 10:31:49 | 显示全部楼层
一错,好东西.谢谢分享.

出0入0汤圆

发表于 2012-11-19 10:14:00 | 显示全部楼层
good job !!!

出0入0汤圆

发表于 2013-9-13 13:44:43 | 显示全部楼层
看看。。

出0入10汤圆

发表于 2013-12-19 15:23:45 | 显示全部楼层
MARK!!!

出0入0汤圆

发表于 2013-12-20 18:45:07 | 显示全部楼层
mark a mark

出0入0汤圆

发表于 2013-12-20 18:52:25 | 显示全部楼层
好东西,收下

出0入0汤圆

发表于 2017-12-13 11:35:10 | 显示全部楼层
很好不错,下来用一下、

出0入0汤圆

发表于 2018-4-19 10:43:02 | 显示全部楼层
很棒,,不错

出0入0汤圆

发表于 2018-5-2 11:43:15 | 显示全部楼层
很少用调度器,一般都是裸奔。有用过实际项目中的吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 04:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表