Archiv verlassen und diese Seite im Standarddesign anzeigen : Parameterübergabe
HI
Wie kann ich in BASCOM an eine Funktion 2 Byte Parameter übergeben?
So funzt's nicht...
Declare Function Funktion(byval byte1 as Byte, byval byte2 as Byte) as Byte
'...
A = Funktion(1, 2)
'...
End
Function Funktion(byte1 as Byte, byte2 as Byte)
'...
End Function
Was ist da falsch?
Kann ich nur einen Parameter vom gleichen Typ übergeben?
Wenn ich das so mache, ist bei mir byte2 immer 0.
Danke schonmal!
Tobi
Was issn ich hab die bei mir laufn lassen und es ging hast du A gedimmt?
Martin
Hi!
Ja, a ist als Byte gedimt.
Es gibt auch keine Fehler oder so, aber byte2 ist immer 0.
Ich habe inzwischen bei den Beispielen gekuckt, und da haben die das mit einem Sub gemacht. aber ich muss jetzt statt den zweiten Parameter einfach als Zahl zu schreiben, ihn in einer extra variable speichern;
sonst geht's auch nicht.
*ARGH*
Danke, vor allem für's testen!!
Tobi
1. poste mal bitte deinen ganzen quellcode
2. kannste auch nen word dimmen das hat 2 bytes und du kannst da die beiden bytes wieder rauslesen mit high und low.
Martin
:D
Das sind 300 Zeilen ungekürzt...
iss egal machs als anhang ich werds mir mal ansehen :-)
Erhöhe mal die Werte für Soft - und Hardware Stack und Frame unter Optionen. Die voreingestellten Werte sind so niedrig, das es oft nicht mit den Parametern klappt.
... :D Scheint ja ein mittelgroßes Problem zu sein :D...
Ich habe das jetzt soweit hingekriegt, dass es mir halbwegs gefällt.
Danke an alle beteiligten. :!:
Ich glaube BASCOM hat noch ein paar Tücken.
Wieso funktioniert das mit der simplen Funktion nicht??
Viele liebe Grüße und DANKE nochmal!
Tobi
Poste ganze Funktion dann kann man es mal testen. Im Grunde geht eigentlich fast alles in Bascom, man muss nur raus bekommen wie
Hi,
Ja, das ist in Bascom das Problem. Es geht eigentlich, aber bis man weis wie ist man vor Wut schon fast geplatzt.
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++
'| _MEECH_ HAUPRPROGRAMM |
'| Copyright: Tobias Schlegel |
'| Version 0.5 |
'| |
'| www.drschlegel.de/tobias |
'| Compiled for ATMEGA16, 16Mhz (ext.)Crystal |
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++
'===CONFIGURATIONS===
$regfile = "m16def.dat"
$baud = 9600
$crystal = 16000000
$lib "i2c.lib"
Declare Sub S_servo(byval Number As Byte , Countt As Byte)
Dim A As Byte
Dim B As Byte
B = 80
Call S_servo(1 , B)
End
Sub S_servo(byval Number As Byte , Byval Countt As Byte)
lcdlowline = str(number) + str(Countt)
A = lcdprint()
End Sub
'Andere Funktionen
Das ist die stark gekürzte Version. Sonst würde das ganze etwas umübersichtlich... :D
lcdlowline = str(number) + str(Countt)
A = lcdprint()
Ist eine Anweisung, einen Text über den I²C zum LCD zu schicken.
Wenn ich dtatt dem B im Funktionsaufruf einfach 80 eintrage, kommt der Fehler "byval should be defined" oder so ähnlich.
Ich fahre jetzt nur leider Nach Sinsheim ins Museum; Familienausflug, da kann man sich schlecht drum drücken... :D
Danke, schonmal,
Tobi
Ich weiß nicht was in dem Beispiel "lcdlowline" darstellt. Soll das eine Stringvariable sein? Wenn ja, musst die z.B. so definieren:
Dim Lcdlowline As String * 10
dann gehts!
Hallo
Declare Sub S_servo(byval Number As Byte , Countt As Byte)
sub S_servo(byval Number As Byte , Byval Countt As Byte)
Bei Deklaration fehlt vor Countt das byval. Danach sollte es gehen.
MFG
Dieter
Hi!
Ich habe's mit dem byval in Define getestet.
Aber dann ist countt in der Funktion = 1
Weis der Geier warum.
lcdlowline ist eine Stringvariable; ich habe sie vergessen...
Einfach weggekürzt.
In ihr wird die untere Zeile des I²C-LCDs gespeichert.
mit lcdprint() wird die ganze Sache dann ans LCD übermittelt.
Viele Grüße,
Tobi
Nimm byval und denk an oben gesagtes:
Erhöhe mal die Werte für Soft - und Hardware Stack und Frame unter Optionen. Die voreingestellten Werte sind so niedrig, das es oft nicht mit den Parametern klappt.
Hallo
Mit diesem kleine Test sieht aber doch, das die Parameter Übergabe geht.
Woher weißt du denn, das Count 1 ist ?
MFG
Dieter
'===CONFIGURATIONS===
$regfile = "m16def.dat"
$baud = 9600
$crystal = 16000000
$lib "i2c.lib"
Declare Sub S_servo(byval Number As Byte ,Byval Countt As Byte)
Dim A As Byte
Dim B As Byte
Dim Test As Word
Call S_servo(3 , 80)
End
Sub S_servo(byval Number As Byte , Byval Countt As Byte)
Test = Number + Countt
End Sub
Hi!
Da geht das Servo an Anschlag.
Ich habe aber gerade ein ganz neues Problem:
anstatt von 0 als Parameter wird 170 übertragen.
Eine .bas Datei ist im Anhang.
Wie kann man sich das erklären?
ich habe der Variable auch einen komischen namen gegeben, um Verwechselungen auszuschließen.
Warscheinlcih sitz' ich auf der Leitung, aber ich komm nicht drauf... :-s
Wär' lieb, wenn du dir das auch anschauen könntest.
Das wichtige habe ich kommentiert.
Es ist möglich, dass nicht alle Zeichen exakt übertragen wurden, ich weis auch nicht wieso. Gerade Mal- und Geteiltzeichen fehlen ganz.
Danke schonmal!
Tobi
HI
Ich habe den Stack erhöht... und es geht!
Das eine, wie das andere!!
Ich benutze ja den Mega 16, und da wollte ich die absoluten Maximalwerte wissen.
Ich habe jetzt
HW Stack 64
und
Soft Stack 16
Wieviel kann ich noch weiter gehen?
Aber was soll das? Kann das Bscom nicht selber?
Noch eine Frage:
Kann ich diese Werte irgendwo nachlesen?
und: Kann ich sie im Quellcode festlegen?
DANKE, an alle!!
Besonders an Frank, der das Problem ja schon anno dazumal erkannt hat.
Ich dreh nur nicht so gerne an so Einstellungen rum, da ich immer befürchte der Chip ist hinterher schrott, und das wäre bei einem SMD-Mega nicht so gut... :D
Nochmal DANKE an alle :!: :!:
Viele Grüße,
Tobi
Bitte! Ich hatte das Problem auch mal ne Weile. Wenn man es erst mal weiß dann findet man auch in der Hilfe einiges dazu. Man kann es auch im Quellcode festlegen, ich weiss nur gerade nicht die Befehle.
Die Standard-Einstellungen reichen oft nur aus, wenn man keine Funktionen und Interrupts nutzt, ansonsten muß man es erhöhen. Die Grenze kenn ich nicht, wird wohl nur duch verfügbaren Speicher begrenzt. Solange der nicht knapp ist, kannst zu z.B. überall 64 eintragen - so halte ich es. Welche Einstellung für was ist, steht aber wie gesagt irgendwo in der Hilfe und dem Kühnel Buch
HI Frank!
OK, alles klar.
Wo muss ich im Kühnel-Buch gucken? Ich habe das alte.
Ich habe in dieser Befehls-Erklärung nix gefunden...
Kann es da keine Overflows geben?
Danke nochmal!
Viele liebe Grüße,
Tobi
Irgendwo auf den ersten Seiten hab ich dazu was gelesen, aber viel war´s auch nicht.
Die Bedeutung sieht man ja auch wenn man mit der Maus in der Dialogbox über die Felder geht (Tooltip).
Die passenden Quellcodebefehle hab ich nu garnicht mehr gefunden, hoffentlich hab ich da kein Mist erzählt. Ich meine es aber mal irgendwo gelesen zu haben.
Overflows gibts bei den paar Bytes noch nicht
Hi Frank
Ok. Sonst kann man denen mal ne Mail schicken.
Du hast irgendwo mal geschrieben, dass das zweite beser ist.
Loht es sich wirklich das zweite zu kaufen?
Liebe Grüße,
Tobi
Hi,
ist Ansichtssache! Wenn du das erste Buch für ein paar Euro bei Ebay oder Amazon los bekommst, dann würde ich mir zweite kaufen. Ansonsten lohnt es sich vielleicht weniger, obwohl es schon erheblich erweitert ist.
Hi Frank!
OK. Danke!!
ich werd' mal schauen; sonst kaufe ich das Buch von Roland Walter
(www.rowalt.de kennst du ja.)
Gibt's das bei Roboter-Teile.de?
Liebe Grüße, Tobi
Nö, bei http://www.robotikhardware.de/
Hi
Oops... Das habe ich eigentlich gemeint... sorry. :oops:
Frank: Coolse neues Design! Gefällt mir!!
Ok... Vielleicht ordere ich es mal...
Liebe Grüße,
Tobi
ist jetzt inzwischen schon irgendwas rausgekommen wie man die werte am besten berechnet/einstellt
gruß werner...
Declare Function Funktion(byval byte1 as Byte, byte2 as Byte) as Byte
'...
A = Funktion(1, 2)
'...
End
Function Funktion(byte1 as Byte, byte2 as Byte) as byte
'...
End Function
sollte funzen
ich dachte jetzt eher an die compilerwerte für stack und framesize...
Declare Sub S_servo(byval Number As Byte , Countt As Byte)
Dim A As Byte
Dim B As Byte
B = 80
Call S_servo(1 , B)
End
Sub S_servo(byval Number As Byte , Byval Countt As Byte)
lcdlowline = str(number) + str(Countt)
A = lcdprint()
End Sub
Versuch doch mal Number und Countt mit Print auszugeben und lass lcdlowline erstmal weg, dann kannst du wenigstens sicher sein, dass es wirklich an der Übergabe liegt. Ich hatte mal ei ähnliches Problem, wo ich die ganze Zeit dachte, dass es an der Übergabe läge, tatsächlich lag es dann an einer unlogischen Macke von Bascsom dahinter.
MFG Moritz
MFg Moritz
Hi, Männer. Für die Stackberechnung gibts gute Hilfe bei
Bascom HELP--> Index --> STCHECK
mfg robert
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.