一:什么是邮箱
邮箱是UCOS中的一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。通常该指针指向一个包含了“消息”的特定数据结构。
邮箱可以建多个,邮箱的最大数量由OS_CFG.H文件中的配置常数OS_MAX_EVENTS设定。一个邮箱只能保存一则消息。
二:邮箱的使用目的:
1.通知一个事件的发生(发送一条消息)那么初始化时就要把该邮箱设空(NULL)。
2.如果用邮箱共享某些资源,那么就要初始化该邮箱为一个非NULL的指针,这种情况下,邮箱被当作一个二值信号量来使用。
三:程序示例:
NO1 :
Void main(void)
{
OSInit();
AckMbox = OSMboxCreate( ( void * ) 0 );
TxMbox = OSMboxCreate( ( void * ) 0 );
OSStart();
}
Void Task1( void * data)
{
Char * txmsg;
Txmsg = ‘A’ ;
For (; ;){
OSMboxPost(TxMbox, ( void * )&txmsg );
OSMboxPend(AckMbox,0,&err) ;
Txmsg ++;
If ( txmsg == ‘Z’){
Txmsg = ‘A’ ;
}
}
}
Void Task2 ( void * data )
{
Char * rxmsg;
INT8U err ;
For ( ; ;){
Rxmsg = ( char *)OSMboxPend(TxMbox, 0,&err)
PC_DispChar ( 70 ,18 ,* rxmsg ,DISP_FGND_YELLOW+DISP_BGND_RED);
OSTimeDly (1);
OSMboxPost ( AckMbox , (void *) 1);
}
}
NO2:
Void main (void)
{
OS_EVENT * MboxSem;
OSInit();
MboxSem = OSMboxCreate( ( void * ) 1 );
OSStart();
}
Void Task1 ( void * pdata )
{
INY8U err ;
For ( ; ; ){
OSMboxPend ( MboxSem , 0 , &err );
.
.
.
OSMboxPost ( MboxSem , (void *) 1 );
}
}
|