求助--类似于.info = snd_ac97_spdif_mask_info的问题。

fzc115100 文思海辉 服务器端工程师  2010-09-17 01:31:35
在linux源代码或者其他代码中经常能遇到
static const struct snd_kcontrol_new snd_ac97_controls_spdif[5] = {
{
.access = SNDRV_CTL_ELEM_ACCESS_READ,
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = SNDRV_CTL_NAME_IEC958("",PLAYBACK,CON_MASK),
.info = snd_ac97_spdif_mask_info,
.get = snd_ac97_spdif_cmask_get,
}
的东西。
左值是函数指针,右值是函数入口地址。
想请教这么做的意义是什么?
我觉得通过指针找函数还是挺麻烦的。一遇到函数指针,跟程序就跟丢了,贼郁闷。
在学不出来,我就回去接着干硬件去了。。。。悲剧~~~
...全文
63 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fzc115100 2010-09-21
[Quote=引用 9 楼 sundesheng125 的回复:]
[Quote=引用楼主 fzc115100 的回复:]
在linux源代码或者其他代码中经常能遇到
static const struct snd_kcontrol_new snd_ac97_controls_spdif[5] = {
{
.access = SNDRV_CTL_ELEM_ACCESS_READ,
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
……
[/Quote]
声卡驱动专家呀~~呵呵。。以后还要多多指教。
回复
fzc115100 2010-09-21
[Quote=引用 10 楼 brookmill 的回复:]
引用 5 楼 fzc115100 的回复:
另外还想请教一下像看linux内核源代码或者上G的大程序应该怎么看啊。

弄到windows里用source insight看
或者就直接在linux里用vim(或emacs)+cscope
[/Quote]
幽默~~
回复
brookmill 2010-09-21
[Quote=引用 5 楼 fzc115100 的回复:]
另外还想请教一下像看linux内核源代码或者上G的大程序应该怎么看啊。
[/Quote]
弄到windows里用source insight看
或者就直接在linux里用vim(或emacs)+cscope
回复
太阳德生 2010-09-19
[Quote=引用楼主 fzc115100 的回复:]
在linux源代码或者其他代码中经常能遇到
static const struct snd_kcontrol_new snd_ac97_controls_spdif[5] = {
{
.access = SNDRV_CTL_ELEM_ACCESS_READ,
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = SNDRV_CTL_NAME_IEC95……
[/Quote】左值是函数指针,右值是函数入口地址。
想请教这么做的意义是什么?

函数的入口地址不就是指针嘛 ,函数指针而已。这种用法的好处是灵活性好,通用性好。在ALSA驱动结构里,这是处于platform层的,也就是所谓的中间层,多个codec都可以用platform层,这样platform层就是共用的抽象层代码,这样写就有很好的可移植性。
回复
fzc115100 2010-09-19
[Quote=引用 5 楼 fzc115100 的回复:]
引用 3 楼 brookmill 的回复:
这种方式还是经常用到的,比如struct file_operations里面的open,read,write之类的,都是函数指针。
他的好处是用起来很灵活很方便,把你自己写的驱动套到统一的结构里面,就可以直接使用了,上面一层的代码就简化很多。


谢谢金九银十。
另外还想请教一下像看linux内核源代码或者上G的大程序应该怎么看啊。
我以前……
[/Quote]
+1
回复
deep_pro 2010-09-18
这种写法其实非常好
这就是c语言的面向对象的封装方式
回复
steptodream 2010-09-18
好难呀 看着代码就晕
回复
fzc115100 2010-09-18
[Quote=引用 3 楼 brookmill 的回复:]
这种方式还是经常用到的,比如struct file_operations里面的open,read,write之类的,都是函数指针。
他的好处是用起来很灵活很方便,把你自己写的驱动套到统一的结构里面,就可以直接使用了,上面一层的代码就简化很多。
[/Quote]

谢谢金九银十。
另外还想请教一下像看linux内核源代码或者上G的大程序应该怎么看啊。
我以前都是写一个单片机小程序,也就两千行的样子,一个.c文件就搞定了。从来没接触过这么大的程序,而且以前也不是计算机专业出身,所以搞的手忙脚乱不得要领,可是看别人虽然也很痛苦,但是进度却比我快多了。不知道有没有什么心得分享一下。
谢谢。
回复
brookmill 2010-09-17
这种方式还是经常用到的,比如struct file_operations里面的open,read,write之类的,都是函数指针。
他的好处是用起来很灵活很方便,把你自己写的驱动套到统一的结构里面,就可以直接使用了,上面一层的代码就简化很多。
回复
brookmill 2010-09-17
也没那么难,看多了用多了习惯了就好了。
回复
fzc115100 2010-09-17
忘了说谢谢了,太不讲究了。呵呵~~
回复
相关推荐
发帖
Linux_Kernel
创建于2007-08-27

4150

社区成员

Linux/Unix社区 内核源代码研究区
申请成为版主
帖子事件
创建了帖子
2010-09-17 01:31
社区公告
暂无公告