资源预览内容
第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
第9页 / 共14页
第10页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
信号量管理,os_sem.c Lzp,什么是信号量?,信号量可以用来保护两个或多个关键代码段,这些关键代码段不能并发调用。在进入一个关键代码段之前,线程必须获取一个信号量。 只有获取了信号量才能进入代码临界段 ucosii信号量由两部分组成:一个16位的无符号整型数;一个由等待该信号量的任务组成的任务等待表,Ucosii提供的基本操作,OSSemCreate-创建一个信号量 OSSemDel-删除一个信号量 OSSemPend-有等待的获取一个信号量 OSSemPost-发出一个信号量 OSSemAccept-无等待的获取一个信号量 OSSemQuery-查询信号量信息 OSSemSet-把信号量计数设为指定的数,创建一个信号量,获取一个信号量,调用OSSemPend获取一个信号量,如果信号量计数0,则将该计数减一,然后返回 否则将阻塞在这里,等待信号量计数0 不能在isr中获取信号量,why? 因为如果在isr中获取信号量,万一信号量计数0,一个中断isr是无法挂起的,它不是个任务,发送信号量,OSSemPost发送一个信号量就是将信号量计数加一,同时判断是否有任务pending在这个信号量上,如果是则唤醒这些任务中优先级最高的那个任务 中断服务程序isr中也可以调用这个函数发送个信号量,查询信号量,查询信号量的信息:有哪些任务在等待这个信号量?信号量的计数当前是多少?等等 查询可以在isr中进行,也可以在任务中进行 查询到的信息通过OS_SEM_DATA返回,设置信号量计数,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号