TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280049: 对比汇编指令,发现编译器对于函数指针中形参的传递出现问题

Part Number:TMS320F280049

测试平台CCS9.0,在函数指针调用的过程中,若使用常数作为形参,存在传递错误的情况。例子如下:

1、变量、函数定义

2、被调用函数的内部

3、函数调用和函数指针调用及计算结果

按理来说两种方法的计算结果应该一致,理应为spd_pid.Out = 1677721, spd_pid.Ui =1677721, spd_pid.Uff = 0.但是只有调用函数pid_setvar1的计算结果是正确的,而调用函数指针spd_pid.setvar结果如下:

Ui和Uff都在错误变化。

4、对比两种调用方法的汇编指令

发现调用函数有将临时变量0压入堆栈中,而调用函数指针是将临时变量0存储在XAR5,其余操作殊途同归

然而,被调用函数的内部指令确没有因此而改变,如下图所示,

不管哪种操作,函数内部都会认为堆栈区中弹出的临时变量是第三个形参,然而函数指针的调用,并没有将0压入堆栈区中,这会导致读取来的第三个形参是错误的。

这是编译器存在的问题,还是我的C语言编写不规范呢?

YuanZe Wang:

代码写错了,结构体里面的函数指针也要声明输入输出类型

,

? ??:

好,我试试

,

? ??:

会报错啊,怎么把函数指针放进结构体

,

YuanZe Wang:

如果一定要typedef的话,用下面这种形式

typedef struct PIDREG3 PIDREG3;struct PIDREG3 {Uint16a;void (*fcn_ptr)(PIDREG3 *,Uint16);
};

,

? ??:

好的,谢谢

,

Lydia:

感谢分享

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280049: 对比汇编指令,发现编译器对于函数指针中形参的传递出现问题
分享到: 更多 (0)