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) reentrant 11 { 12 ppdata = 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) reentrant 24 { 25 ppdata = 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个人需要使用一台打印机,但同一时候只能允许一个人使用这台打印机。这时候就需要一个信号量,先把信号量交给拥有最高优先权的人使用,当这个人使用完成的时候,释放这个信号量,把这个信号量交给当前拥有最高优先权的人。
就是同一时间只能给一个人使用。
时间: 2024-10-16 01:29:23