|
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) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|