mikrocontroller.net

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


Autor: Michael Brügge (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !!

Autor: Daniel V. (danvet)
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.