This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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语言编写不规范呢?