日志档案

发表于 2007-4-23 21:25:54

0

标签: 无标签

摘抄2。

在本例中,我们建立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);

       }

}

系统分类: 嵌入式   |   用户分类: VC++   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(810)    回复(0)  

投一票您将和博主都有获奖机会!