在ISR STM32微控制器中修改结构数据

时间:2016-09-26 15:49:32

标签: c++ c gcc optimization microcontroller

我试图用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中运行良好。没有编译器警告或错误。它不起作用意味着它处于被抓住的状态。为我糟糕的英语而烦恼

0 个答案:

没有答案