首页 > 代码库 > UCOS 信号量
UCOS 信号量
5 OS_EVENT * Sem;//声明一个信号量 6 7 OS_STK xdata Task1Stack[CPU_MAX_STK_SIZE]; 8 OS_STK xdata Task2Stack[CPU_MAX_STK_SIZE]; 9 10 void Task1(void xdata * ppdata) reentrant11 {12 ppdata =http://www.mamicode.com/ ppdata;13 while(1)14 {15 OSTimeDlyHMSM(0, 0, 2, 0); 16 printf("\nTask1_START\n"); 17 OSSemPend(Sem,0,&err);//请求信号量18 printf("Task1_OK\n"); 19 OSSemPost(Sem); //发送信号量20 }21 }22 23 void Task2(void xdata * ppdata) reentrant24 {25 ppdata =http://www.mamicode.com/ ppdata;26 while(1)27 {28 OSTimeDlyHMSM(0, 0, 4, 0); 29 printf("\nTask2_START\n");30 OSSemPend(Sem,0,&err);//请求信号量31 printf("Task2_OK\n"); 32 OSSemPost(Sem); //发送信号量33 }34 }35 55 void main()56 {57 //....... 63 OSInit(); 65 printf("SYSTEM INIT OK\n"); 67 OSTaskCreate(Task2, (void xdata *)0, &Task2Stack[0],5);68 OSTaskCreate(Task1, (void xdata *)0, &Task1Stack[0],6);69 Sem = OSSemCreate(1); //定义信号量,二值信号量70 OSStart(); 71 }
例如有3个人需要使用一台打印机,但同一时候只能允许一个人使用这台打印机。这时候就需要一个信号量,先把信号量交给拥有最高优先权的人使用,当这个人使用完成的时候,释放这个信号量,把这个信号量交给当前拥有最高优先权的人。
就是同一时间只能给一个人使用。
UCOS 信号量
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。