ATmega32 发表于 2008-1-31 20:26:48

Protothreads不错,以后就用它。

Protothreads不错,以后就用它。

Protothreads本身只是几个宏文件,就能实现类似OS线程调度。
没有其他多余程序,可塑性强,打算在其内核基础上加上一些常用功能函数,打造自己的Protothreads。


Protothreads需要注意:
1.线程不能保存局部变量,需要保存保存的局部变量需要定义成静态变量。
2.阻塞函数只能在线程中调用,其他函数不能调用阻塞函数。
3.如果线程包含switch语句,switch语句内不能调用阻塞函数。


#include "config.h"

THR_Create(Thread1);
THR_Create(Thread2);

TMR_Create(timer1);
TMR_Create(timer2);

uint8 Thread1(Tpt *pt)
{
PT_BEGIN(pt);
    while(1)
    {
      PORTA^=_BV(0);
      PT_TIMER_DELAY(&timer1,500);
    }
   PT_END(pt);
}

uint8 Thread2(Tpt *pt)
{
   PT_BEGIN(pt);
    while(1)
    {
      PORTA^=_BV(1);
      timer2.TimerSet(1000);
      PT_WAIT_UNTIL(pt,timer2.TimerExpired());
    }
   PT_END(pt);
}

int main()
{
DDRA=_BV(0)|_BV(1);
PORTA=_BV(0)|_BV(1);

TCNT0 = TCNT0_INIT;
TCCR0 =T0_CLK_DIV256;
TIMSK|=_BV(0);
sei();

while(1)
{
   PT(Thread1)->execute();
   PT(Thread2)->execute();
}
}


半成品,未完成。
点击此处下载ourdev_209975.rar(文件大小:141K)

PaulDE 发表于 2008-1-31 21:00:34

近期一个项目也要用到RTOS,不知道Protothreads占用ROM和RAM的情况如何?

ATmega32 发表于 2008-1-31 21:21:10

Protothreads不用给线程分配堆栈空间,RAM使用基本上和前后台系统一样。
ROM用量也就几百个字节。

要说明的是Protothreads本身并不是OS,但具有类似OS的线程调度。

sukexi 发表于 2009-5-20 23:08:14

Protothreads 推荐一个网站
Protothreads - Lightweight, Stackless Threads in C
http://www.sics.se/~adam/pt/

loopzhong 发表于 2009-5-22 20:13:22

怎么有两个上官金虹?你们是同一个人吗?古龙复活写外传啦?

void_c 发表于 2009-5-22 20:31:46

都是我。

只是换个ID而已。

snoopyzz 发表于 2009-5-22 20:39:28

感觉上官金虹攻击性更强些,
上官先生比较文雅^_^

sipure 发表于 2009-5-22 20:53:08

protothreads,我试下了,按这个思路写了个程序,感觉编译后生成的代码很大,或者说应该是非常大才对.

luckseason 发表于 2013-9-13 13:45:16

路过看看
页: [1]
查看完整版本: Protothreads不错,以后就用它。