c51 Problem mit Initialisierung von globalen Variablen / extern /

OP #3179673
Lesenswert?

Hallo,

ich programmiere hier auf einem c51 und verwende keil als 
editor/debugger (ich versuche ein paar Enocean-Module zu programmieren)

Ich würde gerne über mehrere c-Files hinaus auf eine globale Variable 
zugreifen, aber meine Initialisierungswerte werden einfach nicht so 
übernommen, wie ich mir das vorstelle. Ich versuche das Ganze mal 
beispielhaft darzustellen:

Ich habe mir dafür in meinem header.h (der in allen c-files, die auf die 
Variable zugreifen möchten, eingebunden wird) meine Variable als extern 
deklariert:
1
extern uint8 data my_count;

Nun möchte ich in meinem main.c in einer Funktion int CountTest(testvar) 
auf my_count zugreifen, deshalb habe ich my_count in main.c 
folgendermaßen vor void main() definiert und initialisiert:
1
uint8 data my_count=1;

Nun will ich in der besagten Funktion CountTest (die testvar übergeben 
bekommt) auf my_count zugreifen:
1
int CountTest(testvar)
2
{ 
3
 int i=0;
4
 if (testvar == 1)
5
   my_count++;
6

7
 ....
8

9
 if (my_count > 10)
10
   tu irgendwas;
11
 ....
12

13
}

Nun habe ich das Problem, dass sich my_count anscheinend nie ändert, mir 
kommt es so vor, als würde es immer wieder von neuem mit 1 initialisiert 
werden. Weise ich my_count keinen Wert zu, dann weist der Compiler ihm 
irgendeinen hohen (zufälligen?) Wert zu - da ich damit aber gerne zählen 
würde, brauche ich einen bestimmten Anfangswert.... Ich hätte die 
Funktion CountTest auch schon extern deklariert in der header.h mit 
(extern int CountTest(int testvar);) aber das bringt auch nicht wirklich 
was...

Was mache ich falsch?

Danke für jeden Tipp!
Gast #3179819
Lesenswert?

> ...my_count anscheinend nie ändert, mir kommt es so vor, als ...
Wieso schaust du dir im Simulator nicht an, was passiert? Dann wäre der 
"Anschein" weg und du hast einen Ansatzpunkt, wo's klemmt.

> Nun will ich in der besagten Funktion CountTest (die testvar übergeben
> bekommt) auf my_count zugreifen:
Und welchen Wert hat 'testvar'?
Nach deinem obigen Code wird 'my_count' nur inkrementiert, wenn 
'test_var' gleich eins ist.

Ralf
#3180341
Lesenswert?

Markus Meier schrieb:
> naja, die grundsoftware ist eben schon fertiggestellt, ich möchte nun
> die firmware für das modul erweitern/modifizieren.

... dann stell den Watchdog erst mal ab bzw. mach dir ein Testprojekt an 
dem du die grundsätzliche Problematik mit einem Einfachstbeispiel 
probierst.


Natürlich kann man nicht ausschliessen, dass dein Compiler Fehler hat. 
Die wahrscheinlichere Ursache ist aber, dass es irgendeinen Fehler im 
Programm gibt. Mit einem Einfachstbeispiel, welches sich erst mal nur 
auf diesen Problemkreis konzentriert kann man dieses im Vorfeld erst mal 
abklären.
OP #3180349
Lesenswert?

ok, danke - ich werde zuerst den watchdog abstellen und dann versuchen 
das ganze mit einem noch einfacheren code zu testen.

bisher habe ich leider noch nicht ganz durchschaut, wie man bei diesen 
enocean-modulen am besten debuggt. ich habe mir ein paar leds angelötet, 
aber das ist auch nicht das wahre.. eigentlich hätte ich ja gerne per 
UART gedebuggt - wie bei meinen anderen µc-projekten auch - aber ich 
weiß noch nicht, wie ich das bei diesen modulen anstellen soll...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren