|
求助:关于uc /osii中信号量使用的理解困惑
[复制链接]
在周立功的一本书上看到如下的程序(节选)
TASK0()
{
..........
while()
{
OSSemPend(Dispem,0,&err);//等待信号量
UART0_SendStr(str0);
OSTimeDly(1);
err = OSSemPost(DispSem);//发送信号量
}
}
TASK1()
{
..........
while()
{
OSSemPend(Dispem,0,&err);//等待信号量
UART0_SendStr(str1);
err = OSSemPost(DispSem);//发送信号量
}
}
明显程序是想用信号量控制的方式用UART0交替发送str0和str1,但是小弟不理解的是开始执行TASK0后程序先调用了OSSemPend(Dispem,0,&err),来等待信号量,这样TASK0被挂起,TASK1执行,但TASK1执行后也是先执行了OSSemPend(Dispem,0,&err),TASK1也被挂起,这样两个任务都不会调用 OSSemPost(DispSem),来发送信号量,也就是说两个任务都被永久挂起了,是这样理解的吗?如果是这样那不就错了吗?望高手能指教!
|
|