Hallo zusammen,
ich habe jetzt mein Projekt auf ein Minimum runtergekürzt und das
Problem tritt immernoch auf.
Ich wäre euch sehr dankbar, wenn ihr mir das Brett vom Kopf nehmen
könntet. :-)
main.c:
1 | #include <stdint.h>
|
2 |
|
3 | int main(void);
|
4 | extern void BiosRs232_Task(void);
|
5 | extern void ApplComm_Task(void);
|
6 |
|
7 | int main(void)
|
8 | {
|
9 | while(1)
|
10 | {
|
11 | BiosRs232_Task();
|
12 | ApplComm_Task();
|
13 | }
|
14 | return (0);
|
15 | }
|
ApplComm.c:
1 | #include <stdint.h>
|
2 |
|
3 | volatile uint32_t ApplComm_Debug1 = 1;
|
4 | volatile uint32_t ApplComm_Debug2 = 1;
|
5 |
|
6 | void ApplComm_Task(void)
|
7 | {
|
8 | ApplComm_Debug1++;
|
9 | ApplComm_Debug2++;
|
10 | }
|
BiosRs232.c:
1 | #include <stdint.h>
|
2 |
|
3 | extern volatile uint32_t ApplComm_Debug1;
|
4 | //extern volatile uint32_t ApplComm_Debug2;
|
5 |
|
6 | void BiosRs232_Task(void)
|
7 | {
|
8 | ApplComm_Debug1--;
|
9 | // ApplComm_Debug2++;
|
10 | }
|
Halte ich in ApplComm.c an und betrachte mir die beiden Variablen
ApplComm_Debug1 und 2, so sehe ich deren Inhalt. Steppe ich weiter in
BiosRs232.c und betrachte mir dort die gleichen Variablen, so sehe ich
bei ApplComm_Debug1: optimized away|Error, wobei ApplComm_Debug2 (das ja
hier gar nicht referenziert wird) komischerweise korrekt im
Überwachenfenster angezeigt wird. Aktiviere ich den Code, der auch auf
ApplComm_Debug2 in BiosRs232.c zugreifen will, dann sind beide Variablen
"optimized away"...
Übrigens, der Code arbeitet vollkommen korrekt - die Variablen zählen
richtig.
Kann man AtmelStudio so verstellen, dass die Anzeige der Variablen nur
unter bestimmten Bedingungen möglich ist (nämlich nur in Datei
ApplComm.c und nicht in BiosRs232.c)?
Zur Kontrolle habe ich ein von Grund auf neues Projekt erstellt und nur
die obigen Sourcedateien eingehängt. Gleiches Verhalten.
Bin etwas ratlos, danke.