注册 登录
查看: 495|回复: 12

定义函数时 形参是一个函数是怎么回事 瞬间感觉自己的c弱爆了

[复制链接]
发表于 2014-2-21 13:07:19 | 显示全部楼层 |阅读模式
/*!
*  @brief      设置中断向量表里的中断复位函数
*  @since      v5.0
*  @warning    只有中断向量表位于icf指定的RAM区域时,此函数才有效
*  Sample usage:       set_vector_handler(UART3_RX_TX_VECTORn , uart3_handler);    //把 uart3_handler 函数添加到中断向量表
*/
void set_vector_handler(VECTORn_t vector , void pfunc_handler(void))
{
    extern uint32 __VECTOR_RAM[];

    ASSERT(SCB->VTOR == (uint32)__VECTOR_RAM);  //断言,检测中断向量表是否在 RAM 里

    __VECTOR_RAM[vector] = (uint32)pfunc_handler;
}

回复

使用道具 举报

发表于 2014-2-21 13:16:07 | 显示全部楼层
函数指针,我们准备交稿的K60书籍上就有详细讲这知识点
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-21 13:18:28 | 显示全部楼层
本帖最后由 飞鸿印雪 于 2014-2-21 13:24 编辑
山外メ雲ジ 发表于 2014-2-21 13:16
函数指针,我们准备交稿的K60书籍上就有详细讲这知识点

你们的书什么时候可以买到啊
百度不到这种用法啊   给个关键词呗   
回复 支持 反对

使用道具 举报

发表于 2014-2-21 13:38:44 | 显示全部楼层
如果你看山外哥的例程,会觉得弱爆了。
例如按键消息机制的代码。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-21 13:47:31 | 显示全部楼层
微粒子 发表于 2014-2-21 13:38
如果你看山外哥的例程,会觉得弱爆了。
例如按键消息机制的代码。

恩 是的   感觉代码不费一点功夫  还真不好懂
回复 支持 反对

使用道具 举报

发表于 2014-2-21 13:48:56 | 显示全部楼层
飞鸿印雪 发表于 2014-2-21 13:47
恩 是的   感觉代码不费一点功夫  还真不好懂

不过好处也不少啊,可以大大拓展自己的视野。如果不看山外哥的底层,他的API接口是非常简单易用的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-22 10:09:26 | 显示全部楼层
飞鸿印雪 发表于 2014-2-21 13:18
你们的书什么时候可以买到啊
百度不到这种用法啊   给个关键词呗

山外哥  我回去看了下书   发现书上只有这样的写法啊  void set_vector_handler(VECTORn_t vector , void (*pfunc_handler)(void))   是不是我漏看了什么啊
回复 支持 反对

使用道具 举报

发表于 2014-2-22 11:12:57 | 显示全部楼层
飞鸿印雪 发表于 2014-2-22 10:09
山外哥  我回去看了下书   发现书上只有这样的写法啊  void set_vector_handler(VECTORn_t vector , void ( ...

函数名和函数指针都是一样的,即都是函数指针。不同的是,函数名是一个函数指针常量,指向内容不可修改,而函数指针就可以修改其指向的内容。
回复 支持 反对

使用道具 举报

发表于 2014-2-22 11:14:02 | 显示全部楼层
飞鸿印雪 发表于 2014-2-22 10:09
山外哥  我回去看了下书   发现书上只有这样的写法啊  void set_vector_handler(VECTORn_t vector , void ( ...

很多教材书都不谈这些内容的啊,所以得多网上搜索。
回复 支持 反对

使用道具 举报

发表于 2014-2-22 11:19:53 | 显示全部楼层
山外メ雲ジ 发表于 2014-2-22 11:14
很多教材书都不谈这些内容的啊,所以得多网上搜索。

果断网上搜索,找到了,转到论坛:
彻底搞定C指针-函数名与函数指针
http://www.vcan123.com/forum.php ... tid=2011&extra=

另外,山外哥的帖子也有谈到:
正确解析C语言中的复杂声明
http://www.vcan123.com/forum.php?mod=viewthread&tid=124
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-23 10:48:51 | 显示全部楼层
晋奇 发表于 2014-2-22 11:19
果断网上搜索,找到了,转到论坛:
彻底搞定C指针-函数名与函数指针
http://www.vcan123.com/forum. ...

你好  恕我愚钝  还是没搞懂

如我提的问题

/*!
*  @brief      设置中断向量表里的中断复位函数
*  @since      v5.0
*  @warning    只有中断向量表位于icf指定的RAM区域时,此函数才有效
*  Sample usage:       set_vector_handler(UART3_RX_TX_VECTORn , uart3_handler);    //把 uart3_handler 函数添加到中断向量表
*/
void set_vector_handler(VECTORn_t vector , void pfunc_handler(void))
{
    extern uint32 __VECTOR_RAM[];

    ASSERT(SCB->VTOR == (uint32)__VECTOR_RAM);  //断言,检测中断向量表是否在 RAM 里

    __VECTOR_RAM[vector] = (uint32)pfunc_handler;
}

void set_vector_handler(VECTORn_t vector , void pfunc_handler(void))中的void pfunc_handler(void)我看不出来是在定义一个函数指针变量  如果是这样 void (*pfunc_handler)(void)还在我的理解范围之内  你给的链接的帖子我也看了  也没有这样的写法  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-23 10:49:25 | 显示全部楼层
晋奇 发表于 2014-2-22 11:19
果断网上搜索,找到了,转到论坛:
彻底搞定C指针-函数名与函数指针
http://www.vcan123.com/forum. ...

你好  恕我愚钝  还是没搞懂

如我提的问题

/*!
*  @brief      设置中断向量表里的中断复位函数
*  @since      v5.0
*  @warning    只有中断向量表位于icf指定的RAM区域时,此函数才有效
*  Sample usage:       set_vector_handler(UART3_RX_TX_VECTORn , uart3_handler);    //把 uart3_handler 函数添加到中断向量表
*/
void set_vector_handler(VECTORn_t vector , void pfunc_handler(void))
{
    extern uint32 __VECTOR_RAM[];

    ASSERT(SCB->VTOR == (uint32)__VECTOR_RAM);  //断言,检测中断向量表是否在 RAM 里

    __VECTOR_RAM[vector] = (uint32)pfunc_handler;
}

void set_vector_handler(VECTORn_t vector , void pfunc_handler(void))中的void pfunc_handler(void)我看不出来是在定义一个函数指针变量  如果是这样 void (*pfunc_handler)(void)还在我的理解范围之内  你给的链接的帖子我也看了  也没有这样的写法  
回复 支持 反对

使用道具 举报

发表于 2014-2-23 11:01:11 | 显示全部楼层
飞鸿印雪 发表于 2014-2-23 10:48
你好  恕我愚钝  还是没搞懂

如我提的问题

自行通过编译器来编写代码,测试一下。

多动手!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部