免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2371 | 回复: 5
打印 上一主题 下一主题

一些驱动代码的迷惑. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-03 16:17 |只看该作者 |倒序浏览
小弟刚看驱动.C语言不是很熟,比较生疏,
看完了misc设备的LED驱动能理解70%
但是恰恰好有个问题非常不懂.
static unsigned long led_out[]={
S3C2410_GPIO_OUTP,
S3C2410_GPIO_OUTP,
S3C2410_GPIO_OUTP,
S3C2410_GPIO_OUTP,
}
这里看到文件头式里将S3C2410_GPIO_OUTP定义为
#S3C2410_GPIO_OUTP (0x10<<0);
这里就不明白了,为什么要位移0位?有什么意义?
还有,看了很多函数都是位移,不明白这些位移对驱动有着什么实际的意义?
第二个问题是,在定义LED引脚时用的是无符号int,而定义寄存器用的是无符号long.
这里为什么要这样区分?定义引脚是否可以用ungisned long?
第三个问题是看到PWM(蜂鸣器)驱动时.
一来就看到了有个复合型定义:static struct semaphore lock;
然而在剩下的驱动就没有再看到semaphore的定义了,lock也没有赋值.就是说没有初始化.
那么这句话的赋值或者是定义在哪里?
PWM驱动:http://blog.csdn.net/garby2004/archive/2009/09/28/4604039.aspx

这些问题还请前辈们帮忙指导下.

论坛徽章:
0
2 [报告]
发表于 2010-08-03 17:16 |只看该作者
位移0位应该没什么特殊意义吧,貌似更多的写成(1<< 4),对于GPIO来说比较形象的指出是第几个引脚吧。

论坛徽章:
0
3 [报告]
发表于 2010-08-03 17:19 |只看该作者
2)32位的cpu上,long和int字长是一样的。
3)init_MUTEX(&lock);  这里初始化了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2010-08-03 19:02 |只看该作者
1、那是标准C的惯用方法。我也是猜测的,因为那是一条宏的定义。保证扩展后的宏更容易执行吧。
2、arm中规定,I/O操作中端口类型是unsigned int。寄存器是映射到内存,是unsigned long。虽然它们没有什么区别。
3、semaphore的定义位于#include<asm/semaphore.h>当中。

论坛徽章:
0
5 [报告]
发表于 2010-08-03 23:20 |只看该作者
但是我看到
http://blog.csdn.net/garby2004/archive/2009/09/28/4604039.aspx
并没有定义#include<asm/semaphore.h>这个文件头.
其他两个问题大概的理解了.
但是最后一个问题还是不懂.

论坛徽章:
0
6 [报告]
发表于 2010-08-05 15:21 |只看该作者
确实很困惑,我用source insight也没有挖出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP