Hi Leute,
ich hab ein seltsamen Bug bei meiner FW (mcuxpresso ide).
Variablen aus einem crosscompelierten Archiv werden von falscher Adresse
gelesen, obwohl diese an der richtigen Adresse vom linker platziert und
vom Debugger gelesen/verändert werden können. Ich sehe diese auch im RAM
an der richtigen Add stehen.
Wenn ich mir über einen Pointer die Add der Variable hole, dann zeigt
dieser irgendwo hin. Auch außerhalb jedweder vorkommender Adresse.
Setze ich ein Static davor, funktioniert das Programm ohne Probleme.
Wird der c code im Projekt kompiliert, dann funktionier er auch wie er
soll.
1 | ///////////////////////
|
2 | //reduziertes beispiel
|
3 | //cross compelierter code
|
4 | Test.c
|
5 | Uint8_t crossVar = 20; //Add 0xa000 0000 Image info bestätigt es auch.
|
6 |
|
7 | Test.h
|
8 | Extern Uint8_t crossVar;
|
9 | //ende compelierter code
|
10 |
|
11 |
|
12 | //main.c
|
13 | #include "Test.h"
|
14 |
|
15 | Main(){
|
16 | uin8_t var;
|
17 | uin8_t* pvar;
|
18 |
|
19 | pvar = &crossVar; // zeigt irgendwohin. Add immer gleich bis neue kompiliert wird.
|
20 | var = crossVar; // Ergebniss 0 oder absturz (sprung in hard fault)
|
21 |
|
22 | if(crossVar) //sprung in hard fault oder
|
23 | var = 0;
|
24 | else
|
25 | var = 13;
|
26 |
|
27 | while(1)
|
28 | ++var;
|
29 |
|
30 | }
|
Hat wer ein Tipp zur Lösung?