《信号量管理.ppt》由会员分享,可在线阅读,更多相关《信号量管理.ppt(14页珍藏版)》请在三一办公上搜索。
1、信号量管理,os_sem.cLzp,什么是信号量?,信号量可以用来保护两个或多个关键代码段,这些关键代码段不能并发调用。在进入一个关键代码段之前,线程必须获取一个信号量。只有获取了信号量才能进入代码临界段ucosii信号量由两部分组成:一个16位的无符号整型数;一个由等待该信号量的任务组成的任务等待表,Ucosii提供的基本操作,OSSemCreate-创建一个信号量OSSemDel-删除一个信号量OSSemPend-有等待的获取一个信号量OSSemPost-发出一个信号量OSSemAccept-无等待的获取一个信号量OSSemQuery-查询信号量信息OSSemSet-把信号量计数设为指定的
2、数,创建一个信号量,删除信号量,获取一个信号量,调用OSSemPend获取一个信号量,如果信号量计数0,则将该计数减一,然后返回否则将阻塞在这里,等待信号量计数0不能在isr中获取信号量,why?因为如果在isr中获取信号量,万一信号量计数0,一个中断isr是无法挂起的,它不是个任务,发送信号量,OSSemPost发送一个信号量就是将信号量计数加一,同时判断是否有任务pending在这个信号量上,如果是则唤醒这些任务中优先级最高的那个任务中断服务程序isr中也可以调用这个函数发送个信号量,查询信号量,查询信号量的信息:有哪些任务在等待这个信号量?信号量的计数当前是多少?等等查询可以在isr中进行,也可以在任务中进行查询到的信息通过OS_SEM_DATA返回,设置信号量计数,