Forum: Mikrocontroller und Digitale Elektronik C164CI (Keil-Frage)


von Michael Brügge (Gast)


Lesenswert?

Hallo Forum,

ich bin gerade dabei mit dem Keil uVision3 einige Aufgaben für das 
Studium zu programmieren. Dabei habe ich generell immer ein Problem.

1. Generelle Frage:

Wenn ich mich in main() befinde, und eine variable global deklariere, 
(also noch vor main() die Variable deklariere) kann ich sie zwar in main 
ansprechen.

Wenn ich aber ein neues Modul mache z.B. eine Datei calcul.c welche 
verschiedene Unterprogrammroutinen enthält können diese Routinen nicht 
auf eine global deklarierte Variable zugreifen. Ich muß dann also die 
variable in meinem Modul auch noch mit "extern" bekannt machen.

Ist das richtig ?

2.

Wenn ich einen Haltepunkt in einem Unterprogramm setzte, beispielsweise 
auf eine Variable auf die ständig aufaddiert wird, sagt mir der Debugger 
"out of scope".

Was bedeutet das. Hat es damit etwas zu tun, daß der Debugger 
Modullokale Variablen nicht sehen kann ?

Wenn das stimmt, wie umgehe ich das dann. Ich denke zum einen dadurch, 
daß ich die Variable wieder mit extern vereinbare, was aber 
wahrscheinlich schlechter programmierstil ist. Würden hier Übergabewerte 
als Zeiger Abhilfe schaffen ???

Danke für eure Hilfe und ein schönes Wochenende !!

von Daniel V. (danvet)


Lesenswert?

Michael Brügge schrieb:
> Hallo Forum,
>
> ich bin gerade dabei mit dem Keil uVision3 einige Aufgaben für das
> Studium zu programmieren. Dabei habe ich generell immer ein Problem.
>
> 1. Generelle Frage:
>
> Wenn ich mich in main() befinde, und eine variable global deklariere,
> (also noch vor main() die Variable deklariere) kann ich sie zwar in main
> ansprechen.
>
> Wenn ich aber ein neues Modul mache z.B. eine Datei calcul.c welche
> verschiedene Unterprogrammroutinen enthält können diese Routinen nicht
> auf eine global deklarierte Variable zugreifen. Ich muß dann also die
> variable in meinem Modul auch noch mit "extern" bekannt machen.
>
> Ist das richtig ?

Kann man so machen, wird abersehr schnell unübersichtlich.
Besser ist es den 'calc'-Funktionen die entsprechenden Variablen zu 
übergeben und das ergebnis zurück zu liefern.

So bleiben deine Funktionen und C-Dateien unabhängig.


>
> 2.
>
> Wenn ich einen Haltepunkt in einem Unterprogramm setzte, beispielsweise
> auf eine Variable auf die ständig aufaddiert wird, sagt mir der Debugger
> "out of scope".
>
> Was bedeutet das. Hat es damit etwas zu tun, daß der Debugger
> Modullokale Variablen nicht sehen kann ?
>
> Wenn das stimmt, wie umgehe ich das dann. Ich denke zum einen dadurch,
> daß ich die Variable wieder mit extern vereinbare, was aber
> wahrscheinlich schlechter programmierstil ist. Würden hier Übergabewerte
> als Zeiger Abhilfe schaffen ???

Hab keine Ahnung von µVision, beim AVRStudio kommt das auch manchmal 
vor, dann stimmt aber das Debugg-File nicht mit dem geladenen File vom 
Controller überein. Oder sowas in der Richtung...

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.