原创 摘抄2。

2010-2-23 00:31 1420 9 9 分类: MCU/ 嵌入式

在本例中,我们建立4个任务。在操作系统启动前,首先建立一个消息队列。在任务2-4中,任务会通过消息队列把自己的任务号传送到任务1,任务1负责把任务号通过数码管显示出来。


使用消息队列首先要建立消息队列,建立消息队列使用OSQCreate()函数。本例在操作系统开始运行前使用下面的语句建立一个消息队列完成消息的传送。


#define          MSG_QUEUE_SIZE     20


MsgQueue = OSQCreate(&MsgQueueTbl[0], MSG_QUEUE_SIZE);


MSQ=OSQCreate(&MSQT[0],MSG_QUEUE_SIZE);


这样就建好了一个消息队列,以下是任务2-4的代码。


任务二:


void  Task2 (void *pdata)


{


    char  msg[20];


    strcpy(&msg[0], "0002");                   /* 得到一个字符数组代表任务2 */


    for (;;)


       {


              OSQPost(MsgQueue, (void *)&msg[0]);     /* 使用消息队列发送 */


              OSTimeDlyHMSM(0, 0, 0, 500);


       }


}


任务三:


void  Task3 (void *pdata)


{


    char  msg[20];


    strcpy(&msg[0], "0003");                   /* 得到一个字符数组代表任务2 */


    for (;;)


       {


              OSQPost(MsgQueue, (void *)&msg[0]);     /* 使用消息队列发送 */


              OSTimeDlyHMSM(0, 0, 0, 500);


       }


}


任务四:


void  Task4 (void *pdata)


{


    char  msg[20];


    strcpy(&msg[0], "0004");                   /* 得到一个字符数组代表任务2 */


    for (;;)


       {


              OSQPost(MsgQueue, (void *)&msg[0]);     /* 使用消息队列发送 */


              OSTimeDlyHMSM(0, 0, 0, 500);


       }


}


任务2-4的消息需要任务1进行显示,LEDDisplay()函数是数码管显示函数。任务1的代码如下:


任务一:


void  Task1 (void *pdata)


{


       char  *msg;


       INT8U  err;


       for (;;)


       {


              msg = (char *)OSQPend(MsgQueue, 0, &err);   /* 使用消息队列接收 */


              LEDDisplay(msg);


              OSTimeDlyHMSM(0, 0, 0, 100);


       }

}
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条