中级会员
- 积分
- 416
- 金钱
- 416
- 注册时间
- 2016-5-8
- 在线时间
- 70 小时
|
1金钱
本帖最后由 歪点原孑 于 2016-5-29 21:22 编辑
我的问题是:YouTask为啥不能一直循环运行?什么原因?谁能帮我解决了,我就给谁微信发10元红包。拜托各位大神了!代码压缩包见附件。运行环境是VC6.0
[mw_shl_code=c,true]#include "includes.h"
#include "vc_init.h" //包含VC初始化文件
//-------------------------------------------------------------
#define TASK_STK_SIZE 512 //任务堆栈长度
OS_STK MyTaskStk[TASK_STK_SIZE];//定义任务堆栈区
OS_STK YouTaskStk[TASK_STK_SIZE];
OS_STK HerTaskStk[TASK_STK_SIZE];
INT8U err;
OS_EVENT *Semp;
void MyTask(void *pdata); //声明一个任务
void YouTask(void *pdata);
void HerTask(void *pdata);
/************************主函数*********************************/
void main (void)
{
VCInit(); //初始化VC
OSInit(); //初始化uCOS_II
//开启定时器线程,20 ticks/s
timeSetEvent(1000/OS_TICKS_PER_SEC, 0, OSTickISR, 0, TIME_PERIODIC);
Semp = OSSemCreate(1); //创建信号量,初值设为1
OSTaskCreate(MyTask, (void *)0, &MyTaskStk[TASK_STK_SIZE - 1], 1); //创建任务MyTask,优先级为1
OSTaskCreate(YouTask, (void *)0, &YouTaskStk[TASK_STK_SIZE -1], 3);//创建任务YouTask,优先级为3
OSTaskCreate(HerTask, (void *)0, &HerTaskStk[TASK_STK_SIZE -1], 5);//创建任务HerTask,优先级为5
OSStart(); //启动多任务管理
}
void MyTask(void *pdata)
{
OSTimeDlyHMSM(0,0,2,0);
for(;;)
{
printf("MyTask:准备请求信号量……\n");
OSSemPend(Semp,0, &err);
printf("--------MyTask获得信号量,开始运行啦!--------\n");
OSSemPost(Semp);//释放信号量
OSTimeDly(40);//等待2s
}
}
void YouTask(void *pdata)
{
for(;;)
{
printf("YouTask开始运行。\n");
OSTimeDly(40);//等待2秒
}
}
void HerTask(void *pdata)
{
for(;;)
{
OSSemPend(Semp,0,&err);
printf("HerTask开始抱住资源不放○○○\n");
while(1);
OSSemPost(Semp);
OSTimeDly(40);//延时2秒
}
}[/mw_shl_code]
|
|