20190513_驱动框架one

1、内核中信号量使用

 

struct semaphore stSem   //lunux 中定义一个信号量
sema_init(&stSem, N)     //初始化一个信号量; cnt > 0 表示同时被cnt个人使用;cnt=0用于同步,需要+1之后才能被使用。
up(&stSem)               //释放资源,信号量的值cnt+1
down(&stSem)             //获取信号量,如果信号量的cnt>0,则获取成功,获取成功后cnt-1。如果获取信号量失败则挂起进程。
down_trylock             //和down大致功能一直,区别是down_trylock获取是被不会挂起,所以根据这个接口的返回值,要自己定义处理措施。

2、内核中等待队列

wait_queue_head_t   stWaitq   		 //定义一个等待队列
init_waitqueue_head(&stWaitq) 		 //初始这个待队列
wake_up(stWaitq)              		 //唤醒
wait_event_timeout(&stWaitq,flag,time)  //获取消息队列,当flag=1是获取成功;当flag=0时,获取失败,进程阻塞,进过time时间后重新唤醒。
poll_wait(,&stWaitq,)                   //这个函数在.poll中使用,和wait_event_timeout差不多的效果 都需要被唤醒

 

3、应用

   

gstMemCB	//共享内存控制块
		{
		    strMenBuff 				//控制块.存储
			     	 {
						strSem      		//控制块.存储.信号量  
						*pMenBuff           //控制块.存储.内存地址  
					 }
					 
			strMemDev               //控制块.设备
					{
						u32UsrCnt			//控制块.设备.计数
						bReady				//控制块.设备.准备就绪
						strDevWaitQueue		//控制块.设备.设备等待队列
						strPollWaitQueue	//控制块.设备.epll等待队列
						Cdev				//控制块.设备.正真设备
					}			
	      
            stSem		            //共享内存信号量    
		}

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值