ucos任务与信号量的例子

#include "includes.h"

#define  TASK_STK_SIZE                 512

#define  N_TASKS                        2

OS_STK         TaskStartStk[TASK_STK_SIZE];

OS_STK  Task1Stk[TASK_STK_SIZE];

OS_STK  Task2Stk[TASK_STK_SIZE];

char             TaskData[N_TASKS];              

OS_EVENT      *RandomSem;

void   Task(void *data);                     

void   TaskStart(void *data);

void main (void)

{

OSInit();                                             

    RandomSem = OSSemCreate(1);                            

    OSTaskCreate(TaskStart, (void *)0, (void *)&TaskStartStk[TASK_STK_SIZE - 1], 0);

    OSStart();                                             

}

void TaskStart (void *data)

{

    UBYTE  i;

    char   s[100];

WORD   key;

data = data;

TaskData[0] = 0;

TaskData[1] = 1;

OSTaskCreate(Task1, (void *)&TaskData[0], (void *)&TaskStk1[TASK_STK_SIZE - 1], 6);

OSTaskCreate(Task2, (void *)&TaskData[1], (void *)&TaskStk2[TASK_STK_SIZE - 1], 7);

for (;;) {

………………………………….

OSTimeDlyHMSM(0, 0, 1, 0);

}

}

void Task1 (void *data)

{

    UBYTE x;

    UBYTE y;

UBYTE err;

for (;;) {

        OSSemPend(RandomSem, 0, &err);

x = random(80);

y = random(16);

OSSemPost(RandomSem);

PC_DispChar(x, y + 5, *(char *)data, DISP_FGND_LIGHT_GRAY);

OSTimeDly(1);

}

}

void Task2 (void *data)

{

    UBYTE x;

    UBYTE y;

UBYTE err;

for (;;) {

        OSSemPend(RandomSem, 0, &err);

x = random(80);

y = random(16);

OSSemPost(RandomSem);

PC_DispChar(x, y + 5, *(char *)data, DISP_FGND_LIGHT_GRAY);

OSTimeDly(1);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值