Forum: Mikrocontroller und Digitale Elektronik Default_Handler // stm32


von Felix (Gast)


Lesenswert?

Bei mir tritt ein seltsamer fehler auf immer wenn ich diese funktion,
1
Postion_t get_robots_postion(void)
2
{
3
  return Robot.postion;
4
}
aufrufe, und Sie ihren den Wert zurückgeben möchte, springt der 
Prozessor zum Default_Handler().

Die Funktion macht nichts anderes als eine Private Globale Variable, 
auszulesen und ein Element daraus zurück zu schreiben. Der Fehler tritt 
jedes mal reproduzierbar an dieser stelle auf.

Ich nutze bisher keine Interrupts! misc.h und  exti.h sind nirgends 
eingebunden und befinden sich noch nicht mal im Projektverzeichnis.

von w35z24zu (Gast)


Lesenswert?

Was ist ein "Postion"?

"Position" 3x falsch geschrieben?

von holger (Gast)


Lesenswert?

>aufrufe, und Sie ihren den Wert zurückgeben möchte, springt der
>Prozessor zum Default_Handler().
>
>Die Funktion macht nichts anderes als eine Private Globale Variable,
>auszulesen
>
>Ich nutze bisher keine Interrupts! misc.h und  exti.h sind nirgends
>eingebunden

Nicht nur Interrupts können im Default Handler landen.
Auch Bus Faults können da hin springen wenn kein Handler
dafür angegeben ist.

Also tippe ich auf Bus Fault. Sprich Zugriff auf Adresse
die nicht existiert. Pointer auf Null z.B.

von Thomas W. (diddl)


Lesenswert?

w35z24zu schrieb:
> Was ist ein "Postion"?
>
> "Position" 3x falsch geschrieben?

ne, dass müsste doch schon beim linken auffallen?

von Felix (Gast)


Lesenswert?

ich hatte es hier wirklich dreimal falsch eingetippt ...

Grad noch weiter getestet. Offenbar gibt es ein Problem mit der 
Struktur.
1
typedef struct
2
{
3
  Position_t pos;
4
  Position_t oldpos;
5
  Speed_t speed;
6
  float left_path;
7
  float right_path;
8
  float length;
9
  uint32_t t;
10
} Od_data_t;

Wenn ich das ganze als Pointer auf die Struktur initialisiere kann ich 
nicht mehr schreibend drauf zugreifen:
1
Od_data_t od_data;
2
od_data.t = 123;
geht
1
Od_data_t *od_data;
2
od_data->t = 123;
geht nicht (daten aus der Initialisierung werden nicht überschrieben) 
und führt bei obigen Funktionsaufruf zu dem Sprung in den 
default_handler(beim return)

Grundsätzlich spricht doch nichts gegen derartige Zuweisungen?

von holger (Gast)


Lesenswert?

>Od_data_t *od_data;
>od_data->t = 123;
>
>geht nicht

Das ist ein Pointer auf eine Struktur.
Wenn du dem nicht die Adresse einer Struktur übergibst
zeigt er auf Null, peng Bus Fault -> Default Handler.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.