DSPwilliam hill官网
直播中

陶陶

11年用户 59经验值
擅长:MEMS/传感技术 嵌入式技术 制造/封装 处理器/DSP
私信 关注

ccs调试算法代码,子函数形参的值无法正常传递

请教大家:我自己编写了组合导航相关的算法,在VS2013上已经调试通过了,但是利用CCS将适当修改后的代码写入F28335的RAM中调试的时候,有一个子函数的参数传递有问题,如下:

主函数:
int q_0 = 15;
int r_0 = 3;
double coef_fb_0 = 1.0;
void main()
{
         InitSysCtrl();
         ////InitGpio();
         DINT;
         InitPieCtrl();
         IER= 0x0000;
         IFR= 0x0000;
         InitPieVectTable();
         kf= kalman_init(q_0, r_0);
进入子函数kalman_init之后:
1.png
此时temp_kalmamqr没有值,q0r0的值为153:
2.png

执行Kalman temp_kalmam;这一步:
3.png
此时temp_kalman中的qr的值分别为150,以及r0q0都变成了0!!!
4.png

请问大家这个到底是什么原因?




已退回5积分

回帖(3)

FCC2016

2016-6-11 13:50:27
解决了吗???????
举报

陶陶

2016-6-12 09:20:44
引用: FCC2016 发表于 2016-6-11 13:50
解决了吗???????

还没有,你了解吗?还是也遇到了这样的问题。我主要是修改过cmd文件,不知道有没有影响
举报

陶陶

2016-6-12 15:42:49
已解决!
      主要原因是我这个 :    Kalman kalman_init(q_0, r_0)子函数的返回值是一个结构体,该结构定义了好几个非常大的矩阵(15x15维的),所以占用的内存挺大的,当把该结构体定义为全局变量并且作为输入参数同时返回值为void类型时,问题得到的解决!
       解决的方法是我把这个代码现在Visual studio2013上测试,发现进入这个子函数时,实参可以传递给形参,但是单步执行时,就跳出以下错误
图片11.png
       百度查找原因可能是:在分配较大空间的临时变量的时候系统会插入chkstk函数来检测是否超过堆栈上已经分配的空间IDA pro反汇编识图
       所以怀疑可能是返回值的原因,也可能是在子函数内部建立的Kalman类型的局部变量占用的内存太大,于是两种都测试了一下,发现是返回值的问题,问题解决!!
       综上:子函数的返回值为较大的结构体时,可能会涉及到占用内存空间太大导致堆栈不足的问题!
       以上个人见解,希望看到的大侠指正!!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分