Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2980062
  • 博文数量: 685
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5303
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-19 14:17
个人简介

文章分类

全部博文(685)

文章存档

2015年(116)

2014年(569)

分类: 嵌入式

2014-09-23 13:57:13

新版本内核中大内核锁lock_kernel已经被完全去掉,更改老代码驱动中的lock_kernel时可改用up/down函数。

关于up/down的使用,详细如下:

信号量的原理就是一个整数的增减,up=加1,down = 减1;当这个值>=1时它就是属于资源释放状态,此时使用down能获得,如果<=0则无法down获得。

其实信号量不是互斥的,linux内核说定义互斥信号量,只是说你把它初始化为1或者0,然后通过配对使用up down来保证。

up的函数就是加1,down的函数就是减1.


例子:

DECLARE_MUTEX(regs_mutex); //声明并初始化互斥信号量为0。

xxxxx

xxxx

static void ov9650_init_regs(void)
{
int i;

down(®s_mutex);
for (i=0; i {
if (regs[i].subaddr == 0xff)
{
mdelay(regs[i].value);
continue;
}
sccb_write(OV9650_SCCB_ADDR, regs[i].subaddr, regs[i].value);
}
up(®s_mutex);
}


阅读(1546) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~