Hallo,
ich versuche Daten von einem Struct in ISR auf dem uC STM32F4 zu 
verändern. Leider klappt es nicht.
kalman_motor.c
| 1 | /*  kalman_motor.c  */
 | 
| 2 | #include "kalman_motor.h"
 | 
| 3 | 
 | 
| 4 | void pose_estimate(kalman_motor *k, float newPos){...}
 | 
kalman_motor.h
| 1 | /*  kalman_motor.h  */
 | 
| 2 | 
 | 
| 3 | #ifndef KALMAN_MOTOR_H_
 | 
| 4 | #define KALMAN_MOTOR_H_
 | 
| 5 | 
 | 
| 6 | typedef struct{
 | 
| 7 |     float pos;
 | 
| 8 |     float vel;
 | 
| 9 | 
 | 
| 10 |     float P1, P2, P3, P4;
 | 
| 11 |     float Q1, Q2, Q3, Q4;
 | 
| 12 |     float R;
 | 
| 13 | 
 | 
| 14 |     float dt;
 | 
| 15 | }kalman_motor;
 | 
| 16 | 
 | 
| 17 | void pose_estimate(kalman_motor *k, float newPos);
 | 
| 18 | #endif /* KALMAN_MOTOR_H_ */
 | 
main.c
| 1 | #include "kalman_motor.h"
 | 
| 2 | 
 | 
| 3 | kalman_motor motor_pose1;
 | 
| 4 | 
 | 
| 5 | int main(void){
 | 
| 6 | 
 | 
| 7 | while(1){
 | 
| 8 |     start= micros;
 | 
| 9 |     control_loop();
 | 
| 10 |     dur = micros - start;
 | 
| 11 |     Delay(loop_time - dur);
 | 
| 12 | }
 | 
| 13 | 
 | 
| 14 | void control_loop(void){
 | 
| 15 |     pose_estimate(&motor_pose1, measuredPos1);
 | 
| 16 |     motor_angle1 = motor_pose1.pos;
 | 
| 17 |     motor_velocity1 = motor_pose1.vel;
 | 
| 18 | }
 | 
| 19 | }
 | 
Es funktioniert problemlos, wenn ich die 'control_loop' in der Main 
Schleife mit festen Takt aufrufe, sowie es man oben sieht.
Wenn ich den 'control_loop ' in einer Timer Interrupt aufrufe, bleibt 
der uController hängen. Es bleibt immer noch hängen wenn ich volatile 
kalman_motor motor_pose1 definiere.
Es gibt leider keine Compiler Fehler zu sehen. Compiler Optimierung ist 
bei -Os.
Weiss jemand woran es liegt.
Entschuldigt mich für die schlechte Formulierung. Bin kein 
Muttersprachler.
Danke im Voraus.