求助--类似于.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,
}
的东西。
左值是函数指针,右值是函数入口地址。
想请教这么做的意义是什么?
我觉得通过指针找函数还是挺麻烦的。一遇到函数指针,跟程序就跟丢了,贼郁闷。
在学不出来,我就回去接着干硬件去了。。。。悲剧~~~
...全文
118 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
coding码场 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
  • 打赏
  • 举报
回复
忘了说谢谢了,太不讲究了。呵呵~~

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧