Guten Morgen,
ich stehe gerade vor einem Rätsel. Ich wollte nur die Fehler-Ausgabe
testen. Als praktischste Stelle kam mir ein Bresenham-Algorithmus vor,
weil der häufig aufgerufen wurde.
1 | typedef struct State32_s
|
2 | {
|
3 | int32_t z; /**< Zaehler */
|
4 | int32_t n; /**< Nenner */
|
5 | int32_t r; /**< Rest */
|
6 | }
|
7 | State32_t;
|
8 |
|
9 | State32_t GState = {.z = 300, .r = 0};
|
10 |
|
11 | static int32_t foo(void)
|
12 | {
|
13 | State32_t *State = &GState;
|
14 |
|
15 | int32_t dy = ((int64_t) State->z * dx + State->r)/State->n;
|
16 | State->r = ((int64_t) State->z * dx + State->r)%State->n;
|
17 |
|
18 | return dy;
|
19 | }
|
Mit dem Debugger habe ich State->n auf Null gesetzt. Von mir wurden auch
keine extra Fehler-Handler als der HardFault_Handler() implementiert.
Trotzdem wird diese Funktion mit State->n == 0 mehrmals durchlaufen,
ohne dass ein Fehler auftritt. Der Rückgabewert wird auch weiter
verwendet.
Was passiert hier?
Kann man in __eabi_ldivmod() irgendwie hineingucken?