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


von Joe (Gast)


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:
1
Var(1)=Wert_a:Var(2)=Wert_b:Var(3)=Wert_c
2
gosub VerarbeiteWerte
3
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

von Karl H. (kbuchegg)


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

von Armin Kleinert (Gast)


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

von MWS (Gast)


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.

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.