您好!
如果我的代码在 runMotor1Control 例程中运行,它的工作是完美的,例如设置 obj->flagEnableRunAndIdentify = false ...
void runMotor1Control(MOTOR_Handle handle) { MOTOR_Vars_t *obj = (MOTOR_Vars_t *)handle; MOTOR_SetVars_t *objSets = (MOTOR_SetVars_t *)(obj->motorSetsHandle); USER_Params *objUser = (USER_Params *)(obj->userParamsHandle); . . . if (objSets->command_MotorIdentify) { obj->flagEnableRunAndIdentify = false; obj->flagRunIdentAndOnLine = false; obj->speedRef_Hz = 0; obj->flagEnableMotorIdentify = true; objUser->motor_Rs_Ohm = 0.001f; } return; }
但是、当我创建子例程来处理它时、它会跳转到 Interrupt_illegalOperationHandler
void doCommandMotorIdentify(MOTOR_Handle handle) { MOTOR_Vars_t *obj = (MOTOR_Vars_t *)handle; MOTOR_SetVars_t *objSets = (MOTOR_SetVars_t *)(obj->motorSetsHandle); USER_Params *objUser = (USER_Params *)(obj->userParamsHandle); doCommandMotorIdentify(handle); return; }
void doCommandMotorIdentify(MOTOR_Handle handle) { MOTOR_Vars_t *obj = (MOTOR_Vars_t *)handle; MOTOR_SetVars_t *objSets = (MOTOR_SetVars_t *)(obj->motorSetsHandle); USER_Params *objUser = (USER_Params *)(obj->userParamsHandle); if (objSets->command_MotorIdentify) { obj->flagEnableRunAndIdentify = false; obj->flagRunIdentAndOnLine = false; obj->speedRef_Hz = 0; obj->flagEnableMotorIdentify = true; objUser->motor_Rs_Ohm = 0.001f; } return; }
在 doCommandMotorIdentify()例程内,语句
objUser->MOTOR_MOTOR_0.001f Rs_Ohm 肯定导致了故障:(
另请注意此语句
如果(objSets->COMMAND_MotorIdentify == true)将导致故障
但是这个声明是有效的
if (objSets->COMMAND_MotorIdentify)
有人能帮助解释造成这种情况 的原因吗?
丹尼