打印
[PIC®/AVR®/dsPIC®产品]

《求助》关于pic单片机的函数指针问题

[复制链接]
1773|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chinacn1989|  楼主 | 2014-11-11 10:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 chinacn1989 于 2014-11-11 14:54 编辑

使用函数指针的时候发现不能调用函数指针;具体代码如下:
unsigned char  JugeFunVoid(unsigned char (* _p_fun)(),unsigned char Runtimes)
{
unsigned char Runedtimes=0;
while(Runedtimes<Runtimes)
    {
    Runedtimes++;
    if(_p_fun()==0)
        return 0;
    }
        return Runedtimes;
}

调用:

问题就是程序不能正常运行,每次仿真运行到_p_fun()就不能运行了,一直停在这里!
if(_p_fun()==0)
        return 0;

为什么不能运行呢?

是我的代码有问题么?
还有就是我仿真的时候发现,在调用JugeFunVoid这个函数的时候,就直接执行的Write_Parameter(),
难道不是运行到if判断函数返回值的时候执行的么??

沙发
yklstudent| | 2014-11-11 19:19 | 只看该作者
这样试试:
1、if((*_p_fun)()==0)

2、if(JugeFunVoid(&Read_Parameter, 2))

3、if(JugeFunVoid(&Write_Parameter, 2))
祝楼主好运

使用特权

评论回复
板凳
yewuyi| | 2014-11-12 10:55 | 只看该作者
PIC16/18上面不建议使用函数指针,否则编译后的代码量可能超大。

使用特权

评论回复
地板
diweo| | 2014-11-12 16:16 | 只看该作者
你传递进去的是Write_Parameter(),是函数的返回值,不是函数指针。

使用特权

评论回复
5
chinacn1989|  楼主 | 2014-11-13 13:00 | 只看该作者
yewuyi 发表于 2014-11-12 10:55
PIC16/18上面不建议使用函数指针,否则编译后的代码量可能超大。

确实,看到过相关资料说PIC单片机用函数指针不怎么好...
效率不高!

使用特权

评论回复
6
chinacn1989|  楼主 | 2014-11-13 13:00 | 只看该作者
yklstudent 发表于 2014-11-11 19:19
这样试试:
1、if((*_p_fun)()==0)

谢谢,我尝试下!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:努力奋斗,努力学! 努力学习,努力帖! 学=学习;帖=发帖! 学习好了,就发帖和大家分享! 共同学习...

6

主题

272

帖子

0

粉丝