我试图用STM32F407 uC上的ISR中的卡尔曼滤波器估算直流电机的姿态。我的代码在主循环中运行良好。不幸的是,它在ISR中不起作用。执行持续时间不长于ISR时间。
kalman_motor.c
/* kalman_motor.c */
#include "kalman_motor.h"
void pose_estimate(kalman_motor *k, float newPos){...}
kalman_motor.h
/* kalman_motor.h */
#ifndef KALMAN_MOTOR_H_
#define KALMAN_MOTOR_H_
typedef struct{
float pos;
float vel;
float P1, P2, P3, P4;
float Q1, Q2, Q3, Q4;
float R;
float dt;
}kalman_motor;
void pose_estimate(kalman_motor *k, float newPos);
#endif /* KALMAN_MOTOR_H_ */
我在main.c中声明
kalman_motor motor_pose1;
并致电
pose_estimate(&motor_pose1, measuredPos1);
在ISR中。
我已经尝试了
volatile kalman_motor motor_pose1;
它仍然不起作用。编译器优化级别在-Os。
有谁知道如何解决这个问题?
编辑:如果我不使用struct,它在ISR中运行良好。没有编译器警告或错误。它不起作用意味着它处于被抓住的状态。为我糟糕的英语而烦恼