|
6楼
楼主 |
发表于 2008-3-14 15:17:27
|
只看该作者
当然,如果消息队列用动态分配,就方便多了。
但是在小RAM的单片机上,一般是不能用动态分配的。
或者用数组作为消息队列的存储空间。
或者把消息定义成静态变量。
我个人认为,如果用数组作为消息队列的存储空间,不会比用BUF好。
如果将消息都定义成全局变量,使用起来又比较麻烦。
我想给Protothreads加上消息队列,采用把消息队列定义成静态变量的办法,以下是使用消息队列一个简单例子,感觉太麻烦了。
THR_Create(Thread1);
THR_Create(Thread2);
TMR_Create(timer1);
TQueue queue;
uint8 Thread1(Tpt *pt)
{
static TMessage message;
static uint8 count=0;
PT_BEGIN(pt);
while(1)
{
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_4,~GPIOPinRead(GPIO_PORTB_BASE,GPIO_PIN_4));
PT_TIMER_DELAY(&timer1,OS_TICKS_PER_SEC/10);
if(++count>=10)
{
count=0;
message.data='X';
MSG_Post(&queue,&message); //每1S向线程2发送一个消息
}
}
PT_END(pt);
}
uint8 Thread2(Tpt *pt)
{
static TMessage *message;
static uint8 data;
PT_BEGIN(pt);
while(1)
{
MSG_Pend(&queue,&message); //等待消息
data=message->data; //读取消息中的数据
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_5,~GPIOPinRead(GPIO_PORTB_BASE,GPIO_PIN_5));
}
PT_END(pt);
} |
|