一些驱动代码的迷惑.

发布于 2022-09-19 11:21:31 字数 824 浏览 15 评论 5

小弟刚看驱动.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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

赠我空喜 2022-09-20 00:33:48

确实很困惑,我用source insight也没有挖出来

蛮可爱 2022-09-20 00:04:24

但是我看到
http://blog.csdn.net/garby2004/archive/2009/09/28/4604039.aspx
并没有定义#include<asm/semaphore.h>这个文件头.
其他两个问题大概的理解了.
但是最后一个问题还是不懂.

羁拥 2022-09-19 23:25:46

1、那是标准C的惯用方法。我也是猜测的,因为那是一条宏的定义。保证扩展后的宏更容易执行吧。
2、arm中规定,I/O操作中端口类型是unsigned int。寄存器是映射到内存,是unsigned long。虽然它们没有什么区别。
3、semaphore的定义位于#include<asm/semaphore.h>当中。

心清如水 2022-09-19 22:05:45

2)32位的cpu上,long和int字长是一样的。
3)init_MUTEX(&lock);  这里初始化了

寂寞陪衬 2022-09-19 18:49:13

位移0位应该没什么特殊意义吧,貌似更多的写成(1<< 4),对于GPIO来说比较形象的指出是第几个引脚吧。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文