ucos 建立信号量OSSemCreate什么时候计数初值用1,什么时候用0?
2个回答
展开全部
哥哥来解释给你听听吧,当 pend请求发出的时候信号量的值减1,当post的时候信号量的值加1,信号量的值0跟1分别是用来同步跟互斥的,什么是同步,什么是互斥呢。。。假设你把信号量的值设为0,有A,B连个任务,当A发出pend请求的时候它发现此事的信号量值为0就把它减1然后挂起等待,等待到什么时候呢?等待任务B执行post操作把信号量的值加1然后唤醒进程A,然后两个进程同步并发执行。。。通俗点解释就是任务A执行到某个地方的时候先停下来睡觉,等待任务B来叫醒它,然后两个任务一起并发运行,也就是几乎同时从那个点开始运行哈。。。
假设信号量的值是1,就是用来互斥的,A,B两个任务只能其中一个任务pend执行成功返回,此时信号量的值是0,另一个在pend请求的时候就必须把自己挂起等待刚刚那个请求成功的任务执行post操作才能唤醒继续执行。。。
打的字有点多了,好累。。。希望你能够理解!
假设信号量的值是1,就是用来互斥的,A,B两个任务只能其中一个任务pend执行成功返回,此时信号量的值是0,另一个在pend请求的时候就必须把自己挂起等待刚刚那个请求成功的任务执行post操作才能唤醒继续执行。。。
打的字有点多了,好累。。。希望你能够理解!
2013-04-03
展开全部
请参考函数说明,初始值,可以取0到65535之间的任何值。===============OSSemCreate()===============该函数建立并初始化一个[inner]信号量[/inner],信号量的作用如下:* 允许一个任务和其他任务或者中断同步* 取得设备的使用权* 标志事件的发生函数原型:[inner]OS_EVENT[/inner] *[inner]OSSemCreate[/inner]([inner]INT16U[/inner] value);参数说明:value 参数是所建立的信号量的初始值,可以取0到65535之间的任何值。返回值:OSSemCreate() 函数返回指向分配给所建立的信号量的控制块的指针。如果没有可用的[inner]控制块[/inner],OSSemCreate() 函数返回空指针。 到USR嵌入式技术社区网站查看回答详情>>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询