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

DSP程序跑飞的问题

TI的各位专家大家好:

      第一次发帖,请多多包涵。本人使用的是F28027 C2000 Piccolo LaunchPad进行无刷电机开发,开发环境是CCS5.5,无刷电机使用的例程版本是motorware_1_01_00_16。在调试例程中不断出现了程序跑飞的很问题,还请专家们帮忙解答,问题具体描述如下:

这是例程的C语言代码,出现在例程user.c文件 void USER_setParams(USER_Params *pUserParams) 函数当中

pUserParams->motor_Rr = USER_MOTOR_Rr;
pUserParams->motor_Rs = USER_MOTOR_Rs;
pUserParams->motor_Ls_d = USER_MOTOR_Ls_d;pUserParams->motor_Ls_q = USER_MOTOR_Ls_q;

if(((float_t)(pUserParams->motor_Rr) >(float_t)0)&&((float_t)pUserParams->motor_Rs > (float_t)0.0))
{
    pUserParams->powerWarpGain = sqrt((float_t)1.0 + (pUserParams->motor_Rr)/(pUserParams->motor_Rs));
}
else
{
    pUserParams->powerWarpGain = USER_POWERWARP_GAIN;
}

if语句翻译的汇编代码如下:

if(((float_t)(pUserParams->motor_Rr) >(float_t)0)&&((float_t)pUserParams->motor_Rs > (float_t)0.0))
3f27e0: 9A00 MOVB AL, #0x0
3f27e1: 9B00 MOVB AH, #0x0
3f27e2: 1E42 MOVL *-SP[2], ACC
3f27e3: 8A44 MOVL XAR4, *-SP[4]
3f27e4: D038 MOVB XAR0, #0x38
3f27e5: 0694 MOVL ACC, *+XAR4[AR0]
3f27e6: 767FDF2B LCR 0x3fdf2b
3f27e8: 5200 CMPB AL, #0x0
3f27e9: 651F SB C$L3, LEQ
3f27ea: 9A00 MOVB AL, #0x0
3f27eb: 9B00 MOVB AH, #0x0
3f27ec: 1E42 MOVL *-SP[2], ACC
3f27ed: 8A44 MOVL XAR4, *-SP[4]
3f27ee: D03A MOVB XAR0, #0x3a
3f27ef: 0694 MOVL ACC, *+XAR4[AR0]
3f27f0: 767FDF2B LCR 0x3fdf2b
3f27f2: 5200 CMPB AL, #0x0
3f27f3: 6515 SB C$L3, LEQ

汇编代码第7行出现:3f27e6: 767FDF2B LCR 0x3fdf2b,能麻烦专家帮我解释下为什么会有这样一句长跳转指令,长跳转指令的执行结果是:

3fdf2b:   ???? Memory map prevented reading 0x3FDF2B@Program [code=0x20000]。

然后程序就跑飞了。多次重复调试均会出现同样问题,导致电机开发工作无法进展,还请各位帮忙解决,感激不尽!

ming chen3:

回复 YunFei Cao:

TI官方文档给出的说法是6.2.0-6.2.2包含IQMath 编译bug~

为了避免不必要的麻烦还是推荐CCS V6或升级编译器版本。

升级编译器版本:CCS5.5 Help 》 Check for Updates。

在进行项目编译时:build>>properties>>General>>Advance settings>> compiler Verision>>选择高版本编译器

只有升级完成后才会后高版本编译器的选项。

TI的各位专家大家好:

      第一次发帖,请多多包涵。本人使用的是F28027 C2000 Piccolo LaunchPad进行无刷电机开发,开发环境是CCS5.5,无刷电机使用的例程版本是motorware_1_01_00_16。在调试例程中不断出现了程序跑飞的很问题,还请专家们帮忙解答,问题具体描述如下:

这是例程的C语言代码,出现在例程user.c文件 void USER_setParams(USER_Params *pUserParams) 函数当中

pUserParams->motor_Rr = USER_MOTOR_Rr;
pUserParams->motor_Rs = USER_MOTOR_Rs;
pUserParams->motor_Ls_d = USER_MOTOR_Ls_d;pUserParams->motor_Ls_q = USER_MOTOR_Ls_q;

if(((float_t)(pUserParams->motor_Rr) >(float_t)0)&&((float_t)pUserParams->motor_Rs > (float_t)0.0))
{
    pUserParams->powerWarpGain = sqrt((float_t)1.0 + (pUserParams->motor_Rr)/(pUserParams->motor_Rs));
}
else
{
    pUserParams->powerWarpGain = USER_POWERWARP_GAIN;
}

if语句翻译的汇编代码如下:

if(((float_t)(pUserParams->motor_Rr) >(float_t)0)&&((float_t)pUserParams->motor_Rs > (float_t)0.0))
3f27e0: 9A00 MOVB AL, #0x0
3f27e1: 9B00 MOVB AH, #0x0
3f27e2: 1E42 MOVL *-SP[2], ACC
3f27e3: 8A44 MOVL XAR4, *-SP[4]
3f27e4: D038 MOVB XAR0, #0x38
3f27e5: 0694 MOVL ACC, *+XAR4[AR0]
3f27e6: 767FDF2B LCR 0x3fdf2b
3f27e8: 5200 CMPB AL, #0x0
3f27e9: 651F SB C$L3, LEQ
3f27ea: 9A00 MOVB AL, #0x0
3f27eb: 9B00 MOVB AH, #0x0
3f27ec: 1E42 MOVL *-SP[2], ACC
3f27ed: 8A44 MOVL XAR4, *-SP[4]
3f27ee: D03A MOVB XAR0, #0x3a
3f27ef: 0694 MOVL ACC, *+XAR4[AR0]
3f27f0: 767FDF2B LCR 0x3fdf2b
3f27f2: 5200 CMPB AL, #0x0
3f27f3: 6515 SB C$L3, LEQ

汇编代码第7行出现:3f27e6: 767FDF2B LCR 0x3fdf2b,能麻烦专家帮我解释下为什么会有这样一句长跳转指令,长跳转指令的执行结果是:

3fdf2b:   ???? Memory map prevented reading 0x3FDF2B@Program [code=0x20000]。

然后程序就跑飞了。多次重复调试均会出现同样问题,导致电机开发工作无法进展,还请各位帮忙解决,感激不尽!

mangui zhang:

回复 YunFei Cao:

感谢分享     能找到这样的解释不容易

TI的各位专家大家好:

      第一次发帖,请多多包涵。本人使用的是F28027 C2000 Piccolo LaunchPad进行无刷电机开发,开发环境是CCS5.5,无刷电机使用的例程版本是motorware_1_01_00_16。在调试例程中不断出现了程序跑飞的很问题,还请专家们帮忙解答,问题具体描述如下:

这是例程的C语言代码,出现在例程user.c文件 void USER_setParams(USER_Params *pUserParams) 函数当中

pUserParams->motor_Rr = USER_MOTOR_Rr;
pUserParams->motor_Rs = USER_MOTOR_Rs;
pUserParams->motor_Ls_d = USER_MOTOR_Ls_d;pUserParams->motor_Ls_q = USER_MOTOR_Ls_q;

if(((float_t)(pUserParams->motor_Rr) >(float_t)0)&&((float_t)pUserParams->motor_Rs > (float_t)0.0))
{
    pUserParams->powerWarpGain = sqrt((float_t)1.0 + (pUserParams->motor_Rr)/(pUserParams->motor_Rs));
}
else
{
    pUserParams->powerWarpGain = USER_POWERWARP_GAIN;
}

if语句翻译的汇编代码如下:

if(((float_t)(pUserParams->motor_Rr) >(float_t)0)&&((float_t)pUserParams->motor_Rs > (float_t)0.0))
3f27e0: 9A00 MOVB AL, #0x0
3f27e1: 9B00 MOVB AH, #0x0
3f27e2: 1E42 MOVL *-SP[2], ACC
3f27e3: 8A44 MOVL XAR4, *-SP[4]
3f27e4: D038 MOVB XAR0, #0x38
3f27e5: 0694 MOVL ACC, *+XAR4[AR0]
3f27e6: 767FDF2B LCR 0x3fdf2b
3f27e8: 5200 CMPB AL, #0x0
3f27e9: 651F SB C$L3, LEQ
3f27ea: 9A00 MOVB AL, #0x0
3f27eb: 9B00 MOVB AH, #0x0
3f27ec: 1E42 MOVL *-SP[2], ACC
3f27ed: 8A44 MOVL XAR4, *-SP[4]
3f27ee: D03A MOVB XAR0, #0x3a
3f27ef: 0694 MOVL ACC, *+XAR4[AR0]
3f27f0: 767FDF2B LCR 0x3fdf2b
3f27f2: 5200 CMPB AL, #0x0
3f27f3: 6515 SB C$L3, LEQ

汇编代码第7行出现:3f27e6: 767FDF2B LCR 0x3fdf2b,能麻烦专家帮我解释下为什么会有这样一句长跳转指令,长跳转指令的执行结果是:

3fdf2b:   ???? Memory map prevented reading 0x3FDF2B@Program [code=0x20000]。

然后程序就跑飞了。多次重复调试均会出现同样问题,导致电机开发工作无法进展,还请各位帮忙解决,感激不尽!

xing long:

回复 mangui zhang:

你好,我在CCS6.2中也遇到了这个问题。奇怪的是:我建了两个工程(源代码都一样,只是一个是基于TI例程,一个是自己新建的工程),基于TI例程的工程运行没有问题,但自己新建的工程,就遇到了你相同的问题。困惑很久了,能指点一下吗?

赞(0)
未经允许不得转载:TI中文支持网 » DSP程序跑飞的问题
分享到: 更多 (0)