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