PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Edit] Anfängerfragen



Befedo
18.10.2009, 16:22
Hallo Jungs, ich bräuchte mal eure Hilfe.

Und zwar versuch ich gerade ein Array in Bascom zu Initialisieren und zu füllen, mit einem wert X und der Variablen Y (welche hochgezählt wird).

Das ganze sieht so aus:

Dim Array(256) As Integer
Array(Y) = X

Eigentlich ganz simpel. Doch bringt mir BASCOM den Fehler:
Error:46 - Assignment error

Was mache ich Falsch?

danke für eure Hilfe...

Pyro-Mike
18.10.2009, 16:27
Array wird bei dir mit 3 "r" geschrieben.

Befedo
18.10.2009, 19:20
Stimmt, war aber eh nur als Beispiel gedacht...

Habs mal editiert. Der Fehler bleibt gleich.

Danke euch...

linux_80
18.10.2009, 19:50
Hallo,

In welcher Zeile kommt dieser Fehler,
und was sind Y und X für Variablen (Typ und Wert).
Das Array geht dann in diesem Fall von 1 - 256.

Mit wievielen R man Array hier schreibt ist egal, weils ja nur der Variablenname ist ;)

Befedo
18.10.2009, 20:49
Hallo,

der Fehler kommt in der Hauptroutine, keine Funktion oder ein extra Sub etc.. Die Variablen sind vorher mit "Dim" Deklariert und beide vom Typ Integer. 0 und 1.

-Das Array geht dann in diesem Fall von 1 - 256.

Wird es nicht Nullbasiert initialisiert? Weil ich auf diese Position (0) was schreibe.

Danke für die Hilfe...

Jaecko
18.10.2009, 20:49
Steht über diesem Assignment Error zufällig noch ein Error 22 "Out of SRAM Space"?

linux_80
18.10.2009, 21:16
Wenn das Array die erste Variable ist, die Dimensioniert wird, liegt es auch gleich am Anfang im Speicher, dann klappt das mit der 0 nicht !

Arrays sind in Bascom 1-based.

Jaecko
18.10.2009, 23:11
Ich habs grad mal versucht. Wenn der Array ganz am Anfang zuerst dimensioniert wird, gehts trotzdem. y = 0 und Array(y) frisst er ebenso.
Bei Array(0) haut er zwar dann nen Fehler her, aber das ist dann nicht der Assignment Error, sondern "Index out of range".
(auch etwas inkonsequent von Bascom; wenn y = 0 ist, müsste ja bei Array(y) schon der Fehler kommen)

Den Assignment Error kann ich nur reproduzieren, wenn die Grösse des Arrays den freien RAM übersteigt. Aber der kommt dann in Begleitung mit dem "Out of SRAM Space".

Befedo
18.10.2009, 23:28
Hm,

Error 22 steht nicht davor. Auch wenn es 1 Basierend ist bleibt der Fehler gleich...

recycle
19.10.2009, 03:41
Welchen Controler verwendest du denn?
Wenn ich z.b. einen ATiny2313 nehme, kommt bei mir Error 46, vorher allerdings auch Error 22, weil der Speicher nicht reicht.
Bei einem ATMega8 kommt dann gar kein Fehler mehr.
Vielleicht hast di eine andere Bascom Version und da wird der Error 22 einfach noch nicht angezeigt.

Befedo
19.10.2009, 09:22
Gute Idee...

Hab mir mal eine neuere Version (Demo) runtergeladen und nun kommt der Fehler in Verbindung mit Fehler 22 "Out of SRAM space". Ist der Speicher jetzt Defekt oder wird da was falsch Adressiert?

Danke für eure Hilfe

Bammel
19.10.2009, 15:46
ändere doch mal die array größe.. testweise auf array(10)

PicNick
19.10.2009, 16:32
Folgendes kann ich fehlerfrei übersetzen:


$regfile = "m32def.dat"
$crystal = 20000000

Dim X As Integer
Dim Y As Integer

Dim Array(256) As Integer

Array(y) = X

Do

Loop


End


Indexwert =0 würde er erst zur Laufzeit merken

Falsches "Y" bringt ev. index out of range , aber nur, wenn es eine konstante ist, (sonst weiss er's ja nicht)

Falsches "Z" bringt ev. ...doesnot match ....

Assignment Error bringt er nur, wenn "Array" nicht definiert ist (z.B. schreibfehler --> s.o)

Befedo
19.10.2009, 21:58
Hallo Jungs...

Nachdem das mit dem Array geklärt ist, wollt ich nun noch eine Frage klären. Hab deshalb den Thread mal umbenannt.

Und zwar möchte ich mit einem If... Then... Konstruktor ein Ereignislößen, wenn ein Bestimmter Wert in einem Array vorhanden ist.

Das sieht bei mir so aus:


Declare Sub AuszuführenderSub()
Dim Array(256) As Integer 'Diesmal mit zwei R^^


... 'Das Array wird mit Werten gefüllt

If Array(1) = 1 Then
Call AuszuführenderSub 'Wird nicht ausgeführt
End If


Die If Bedingung ergibt nicht True, weis jemand warum bzw. wie man es sonst lösen könnte?

Danke für eure Hilfe

Thomas$
19.10.2009, 23:05
ok du willst wissen ob in dem array irgendwo die 1 steht oder an 1. stelle array(1)?
die sub geht?
array(1)=1 steht bei "'Das Array wird mit Werten gefüllt "?
dann sollte das program gehen
wenn du wissen willst ob ein ein bestimmter wert überhaupt im array vorhanden ist dann mus du noch eine Zählschleife drum rum machen
edit: war noch ein fehler drin jetzt sollte es gehen
Declare Sub AuszuführenderSub()
Dim Array(256) As Integer 'Diesmal mit zwei R^
Dim var as integer

'Das Array wird mit Werten gefüllt
...
....
For var=1 to 256
If Array(var) = 1 Then
dein auszuführendes ereigniss oder die sub
End If
next ' next var oder nur next weis ich grad nicht ganz sicher