Anzeige:

Declare Function in Bascom

Hier finden sie die archivierten Beiträge des alten PHPBB Forums von www.loetstelle.net

Declare Function in Bascom

Von Sam am 10.03.2009 18:35

Hallo Leute
Ich hab ein ziemlich peinliches Problem: Ich hab mich schon immer in allen Basic-Dialekten vor selbst erstellten Funktionen gedrückt, doch jetzt komm ich nicht drumherum. Mein Problem ist, dass ich den "Declare Function" Befehl nicht ganz verstehe. Wo muss ich den was eintragen. (Sry, wenn das jetzt blöd formuliert ist :D )

Danke für alle Antworten.
MfG Sam

Von pcprofi am 10.03.2009 19:28

Am besten einfach vor der Hauptschleife, auf jeden Fall aber VOR der ersten Benutzung der Funktion.

Setz es einfach in den Programm-Header, unter die grundsätzlichen Controller-Einstellungen wie Taktfrequenz und Co...

Gruß Rainer

Von Sam am 10.03.2009 19:34

pcprofi hat folgendes geschrieben:
Am besten einfach vor der Hauptschleife, auf jeden Fall aber VOR der ersten Benutzung der Funktion.

Setz es einfach in den Programm-Header, unter die grundsätzlichen Controller-Einstellungen wie Taktfrequenz und Co...

Gruß Rainer


Wusst ich´s doch; falsch ausgedrückt. Sry, ich meinte, was muss ich hinter "Declare Function ..." eintragen (Parameter, Variablen, ...). Wie sieht so eine Deklaration aus.
Außerdem hab ich noch ein Problem: Ich habe zwei Funktionen die immer wieder gegenseitig auf sich zugreifen. Wenn ich in anderen Basic-Dialekten versuche in eine Funktion eine andere zu integrieren die aber erst danach deklariert wird, kommt eine Fehlermeldung. Wie mache ich das in Bascom?

Von BellaD am 10.03.2009 19:49

Moin

Du machst es genauso Wink

DECLARE FUNCTION TEST[( [BYREF/BYVAL] var as type)] As type

test :Name of the function.

Var :Name of the variable(s).

Type :Type of the variable(s) and of the result. Byte,Word, Integer, Long,
Single or String. Bits are not supported.

When BYREF or BYVAL is not provided, the parameter will be passed by reference.

Use BYREF to pass a variable by reference with its address.

Use BYVAL to pass a copy of the variable.
**************************************

oder du besuchst mal die Seite des Herstellers http://www.mcselec.com/

Re: Declare Function in Bascom

Von gerold am 10.03.2009 22:37

Sam hat folgendes geschrieben:
Mein Problem ist, dass ich den "Declare Function" Befehl nicht ganz verstehe.

Hallo Sam!

Bringt dich das hier weiter?

http://halvar.at/elektronik/kleiner_bascom_avr_kurs/label_prozeduren_funktionen/ (bitte komplett durchlesen)

mfg
Gerold
Smile

Von Sam am 11.03.2009 13:31

BellaD hat folgendes geschrieben:
Moin

Du machst es genauso Wink

DECLARE FUNCTION TEST[( [BYREF/BYVAL] var as type)] As type

test :Name of the function.

Var :Name of the variable(s).

Type :Type of the variable(s) and of the result. Byte,Word, Integer, Long,
Single or String. Bits are not supported.

When BYREF or BYVAL is not provided, the parameter will be passed by reference.

Use BYREF to pass a variable by reference with its address.

Use BYVAL to pass a copy of the variable.
**************************************

oder du besuchst mal die Seite des Herstellers http://www.mcselec.com/


Vielen Dank für deine Antwort, aber meine Problem ist eben das Englische. Ich weiß z.B. nicht, was jetzt der Unterschied zwischen BYREF und BYVAL ist.

gerold hat folgendes geschrieben:
Sam hat folgendes geschrieben:
Mein Problem ist, dass ich den "Declare Function" Befehl nicht ganz verstehe.

Hallo Sam!

Bringt dich das hier weiter?

http://halvar.at/elektronik/kleiner_bascom_avr_kurs/label_prozeduren_funktionen/ (bitte komplett durchlesen)

mfg
Gerold
Smile

Auch dir vielen Dank, nur hat mich das leider auch nicht weitergebracht, denn auf deine Seite geh ich sofort wenn ich ein Problem habe Wink . Dort ist aber leider auch nicht erklärt wie sich die ganze Sache mit den Funktionen aufbaut.

Es wäre ganz nett, wenn mir jemand einen kurzen Beispielcode schreiben könnte. Einfach aufgebaut und mit Kommentaren. Very Happy

Vielen Dank für eure Antworten.

Von gerold am 11.03.2009 14:13

Hallo Sam!

OK, ich dachte, ich hätte ``byval`` und ``byref`` in diesem Kapitel erklärt -- aber dem ist nicht so.

Hier ein Auszug aus dem Kapitel http://halvar.at/elektronik/kleiner_bascom_avr_kurs/20_ausgaenge_mit_computer/

Zitat:
Wenn man sich die Deklarationen der Unterprozeduren ansieht, dann fallen zwei Dinge auf. Ich verwende "byval" und bei "As String" fehlt die Angabe der Textlänge.

Das ist jetzt ein bischen kompliziert. Neutral Der Zusatz "byval" kennzeichnet einen Parameter als "Wertparameter". Das heißt, dass beim Aufruf der Unterprozedur der Wert einer Variable in eine neue Variable (in einen neuen Speicherbereich) kopiert wird. Gibt man "byval" nicht an, dann wird standardmäßig "byref" verwendet. Mit "byref" wird der Wert nicht in einen neuen Speicherbereich kopiert, sondern nur eine Referenz zum Speicherbereich übergeben in dem der Wert liegt. "byval" kapselt die Unterprozedur besser vom Rest des Programmes ab und hilft damit Fehler zu vermeiden. "byref" (der Standard) kapselt den Parameter nicht vom Rest des Programmes ab. Änderungen dieses Parameters (dieser Variable) wirken sich auch außerhalb der Unterprozedur aus. Umgekehrt ist es natürlich genau so. Ein mit "byref" deklarierter Parameter kann sich (z.B. durch einen Interrupt) ändern, wärend die Unterprozedur abgearbeitet wird. Das kann wiederum unerklärliche Fehler hervorrufen. Dafür ist "byref" schneller als "byval", da die Arbeit des Kopierens wegfällt.

So lange du nicht optimieren musst, nimm "byval"!

mfg
Gerold
Smile

Von Sam am 11.03.2009 18:41

Hey, vielen Dank.
Ich will an dieser Stelle mal ein Lob für Gerold schreiben. Er setzt sich immer sehr für alle ein. Respekt!!!

Anzeige: