本帖最后由 xuesong10210 于 2016-9-13 16:57 编辑
本人小白一个最近在学习嵌入式操作系统(ucosii),学习到互斥型信号量一节,在这对互斥型信号量一些理解和大家分享一下,如果有什么理解不对的地方,还希望有大神能给指证。
不说了先帖代码,方便大家理解;
//主函数
int main(void)
{
OSInit(); /* 系统初始化*/
/*创建消息事件*/
Semp = OSMutexCreate(1,&err);//创建信号量
/* 创建主任务*/
OSTaskCreate(MainTask, (void *)0, &MainTask_Stk[MainTask_StkSize-1], MainTask_Prio);
OSStart(); /* 开始任务调度*/
return 0;
}
/* 主任务*/
void MainTask(void *p_arg)
{
p_arg = p_arg;
OSStatInit(); /* 统计任务初始化*/
//while(1)
//{
/* 创建其他任务*/
OSTaskCreate(FirstTask, (void *)0, &FirstTask_Stk[FirstTask_StkSize-1], FirstTask_Prio);
OSTaskCreate(SecondTask, (void *)0, &SecondTask_Stk[SecondTask_StkSize-1], SecondTask_Prio);
OSTaskCreate(ThirdTask, (void *)0, &ThirdTask_Stk[ThirdTask_StkSize-1], ThirdTask_Prio);
OSTaskCreate(FourthTask, (void *)0, &FourthTask_Stk[FourthTask_StkSize-1], FourthTask_Prio);
//OSTimeDlyHMSM(0,0,10,0); /* 任务调度*/
//OSTaskDel(MainTask_Prio); /* 删除主任务*/
//}
}
/* 第一个任务*/
void FirstTask(void *p_arg)
{
for(;;)
{
OSTimeDlyHMSM(0,0,1,200);
{
printf("FirstTask任务被调用执行!\n");
OSMutexPend(Semp,0,&err);
printf("FirstTask请求互斥信号量后!\n");
OSMutexPost(Semp);
}
OSTimeDlyHMSM(0,0,1,200);
}
}
/* 第二个任务*/
void SecondTask(void *p_arg)
{
for(;;)
{
printf("SecondTask任务被调用执行!\n");
OSTimeDlyHMSM(0,0,0,300);
}
}
/* 第三个任务*/
void ThirdTask(void *p_arg)
{
for(;;)
{
printf("ThirdTask任务被调用执行!\n");
OSMutexPend(Semp,0,&err);
printf("ThirdTask请求互斥信号量后!\n");
for(times;times<=20000000;times++)
{
if((times%10000000)==0)
{
printf("ThirdTask的for循环中!\n");
}
OS_Sched();
}
printf("************************\n");
OSMutexPost(Semp);
printf("ThirdTask发送互斥信号量后!\n");
OSTimeDlyHMSM(0,0,1,0);
}
}
/* 第四个任务*/
void FourthTask(void *p_arg)
{
for(;;)
{
printf("FourthTask任务被调用执行!\n");
OSTimeDlyHMSM(0,0,0,200);
}
}
未完接下
|