mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom: Variable in Subfunktion ändern (Pointer?)


Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Folgende Fragestellung für Bascom:

Eine Sub ändert den Wert von Variablen und soll anschließend diese 
wieder zurückgeben. Ich suche eine speichersparende Methode; ohne mich 
in C auszukennen hätte ich darauf getippt, dass ein Pointer hier das 
richtige
wäre. Aber wie geht das am elegantesten in Bascom?

Momentan mache ich das so:
Var(1)=Wert_a:Var(2)=Wert_b:Var(3)=Wert_c
gosub VerarbeiteWerte
Wert_a=Var(1):Wert_b=Var(2):Wert_c=Var(3)

(Die Variablen werden natürlich im Vorfeld definiert)
Funktionell ist das richtig, aber sicher nicht optimiert?!

PS: Ich weiß, dass Bascom hier nicht viele Freunde hat, doch bitte ich 
um Verständnis.... ;-)

Thx,
Joe

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joe schrieb:

> PS: Ich weiß, dass Bascom hier nicht viele Freunde hat, doch bitte ich
> um Verständnis.... ;-)

Oh.
Bascom hat schon Freunde.
Aber was bei uns keine Freundschaft geniesst, sind 'Programmierer' die 
immer noch nicht geschnallt haben, dass es zu jeder Programmiersprache 
so etwas wie ein Handbuch gibt, in dem man die grundlegenden Dinge einer 
Programmiersprache nachlesen kann.

In deinem Fall wirst du in der Bascom Hilfe bei "CALL" fündig

Autor: Armin Kleinert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Joe

CALL wird ja bekanntlich in Zusammenhang mit dem Aufruf einer Subroutine 
verwendet (und kann auch entfallen), ergo sähe Dein Vorschlag so aus:

call VerarbeiteWerte(Wert_a,Wert_b,Wert_c)

bei entsprechender Definition mit byref/byval sollte es dann 
funktionieren.

Aber ich meine irgendwo gelesen zu haben, dass dies nicht ratsam da 
speicherintensiv sein soll.

Armin

Autor: MWS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Argumente nicht explizit ByVal definiert wurden, so sind sie 
standardmäßig ByRef.

ByRef entspricht einem Pointer, nur wird eine per Zeiger übergebene 
Variable in der Sub oder Function bei Verwendung automatisch 
dereferenziert.

Die Adresszeiger auf die Variablen gehen auf den SW Stack. Wenn ByVal 
verwendet wird, so werden die Argumente selbst in temporären Variablen 
auf dem SW Stack angelegt. Der muss dann nur groß genug definiert sein.

Steht aber alles, auch mit Hinweis auf die Größe des benötigten 
Speichers, in der Bascom Hilfe.

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.