Hallo Leute Ich habe da mal ein kleines Problemchen mit Bascom. (wer hat das nicht *g) Ich versuche, seriell übertragene Daten auf einem Display sichtbar zu machen. Das klappt nun nach einigen Tagen auch endlich ! Da die Daten alle als Bytes übertragen werden, aber eigendlich Word-Variablen sind, wandele ich sie nach dem Empfang mit dem "Overlay-Trick" zurück. Die Variablen dafür habe ich wie folgt angelegt: Dim Recbuffer(16) As Byte At &H7E 'Sendepuffer Dim Daten1 As Word At &H7E Overlay 'Timeintervall Dim Daten2 As Word At &H80 Overlay 'Spannung Dim Daten3 As Word At &H82 Overlay 'Strom Dim Daten4 As Word At &H84 Overlay 'Drehzahl Dim Daten5 As Word At &H86 Overlay 'Temperatur Dim Daten6 As Word At &H88 Overlay 'Empänger Spannung Dim Daten7 As Word At &H8A Overlay 'RC Dim Daten8 As Word At &H8C Overlay 'Höhe Das funktioniert auch soweit. Aber nun meine Frage: Die Adressen (&H7E, ...) habe ich von meinem Minilogger, der auf Basis eines Tiny26 läuft, übernommen. Der Controller für das Display ist aber ein Mega32. Welche Adressen sollte ich bei diesem benutzen ? (Werde aus dem Datenblatt nicht wirklich schlau) Und eine zweite Frage hätte ich dann auch noch: Wenn ich nun einigen Variablen einen festen Speicherbereich zugewiesen habe, kann es dann passieren, dass diese von anderen Variablen die ich dann noch normal in Bascom definiere, überschrieben werde ? Gruss Volker
wenn du 2 variablen auf den gleichen speicherplatz leg's wird das sicherlich nicht klappen >Dim Recbuffer(16) As Byte At &H7E 'Sendepuffer >Dim Daten1 As Word At &H7E Overlay 'Timeintervall
Doch sicher, das ist ja extra so gewollt ! Das wird ja extra mit dem Befehl "Overlay" gemacht, damit die 8 Word-Variablen als Bytes übertragen (bzw. im meinem Fall empfangen) werden können. (1 Word = 2 Byte) Das funktioniert ja auch. Mir geht es nur um den Adressraum, den ich dafür beim Mega32 benutzen kann. Gruss Volker
Das ist ja das nette an Bascom Overlayvariablen ... man nehme Bytes, schreibe sie in n Array und hole sich die Teile davon nach Belieben wieder raus. Du kannst den die Speicherstellen für den M32 so lassen. Das passt schon, wenn nciht meckert der Compiler. Wenn Du andere Variablen deklarierst ohne die präzise Speicherstelle anzugeben macht das Bascom intern beim Compilieren schon selber, hab bislang noch nie erlebt, dass da noch andere Variableln tangiert wurden. Das kommt aber schon mal vor, wenn Stack oder Frame zu kanpp bemessen wird.
Volker Bonge wrote: > Dim Recbuffer(16) As Byte At &H7E 'Sendepuffer > > Dim Daten1 As Word At &H7E Overlay 'Timeintervall > Dim Daten2 As Word At &H80 Overlay 'Spannung > Dim Daten3 As Word At &H82 Overlay 'Strom > Dim Daten4 As Word At &H84 Overlay 'Drehzahl > Dim Daten5 As Word At &H86 Overlay 'Temperatur > Dim Daten6 As Word At &H88 Overlay 'Empänger Spannung > Dim Daten7 As Word At &H8A Overlay 'RC > Dim Daten8 As Word At &H8C Overlay 'Höhe Auf diese Art ist dein Code nicht so portabel. Mach es so: Dim Recbuffer(16) As Byte Dim Daten1 As Word At Recbuffer Overlay 'Timeintervall Dim Daten2 As Word At Recbuffer + 2 Overlay 'Spannung Dim Daten3 As Word At Recbuffer + 4 Overlay 'Strom Dim Daten4 As Word At Recbuffer + 6 Overlay 'Drehzahl .... Gruß Rolf
Hallo Rolf Die Möglichkeit war mir noch gar nicht bekannt. So ist das natürlich optimal. Dann brauch ich mich auch nicht mehr um die Adressen kümmern. Vielen Dank Gruss Volker
Schade, dass man nicht Dim Daten2 As Word At Recbuffer + sizeof(word) Overlay schreiben kann, dann könnten sich sogar C-Puristen mit Bascom anfreunden. Und es wäre super-portabel. Gruß Rolf
jetzt mal einer aus der asm ecke, du sparst 16 byte ram und ca. 100 takte, ,na klasse, um 16 stunden fehler zu suchen!! mein vorschag : trenne den tx/rx puffer von dem datenbereich deiner anwendung! wenn der letzte wert (der wichtigste) "geschrieben wird, dann kopiere es in in den puffer, sende oder empfange etwas", SO KANNST du in deiner anwendung fehler suchen!! wenn mehr als ein prog-schnippel auf ein und den selben ram-bereich zugreift (egal ob schreibend oder lesend [oder doch versehendlich schreibend]) finden sich bug's ganz schwer. um fehler zu suchen, kannst du z.b. das kopiern sein lassen und nur den sende / empang (ermöglichen), ist die macke immer noch da, liegts an deinem übergeordnetem prog gruß pico
Hi pico genauso mache ich es im Prinzip. Die oben angegebenen Variablen dienen mir nur dazu aus den empfangenen Bytes wieder Word-Variablen zu machen. Zum Einlesen habe ich noch ein extra Array. Prinzipieller Programmablauf: ankommende Daten: Header (5 Bytes) + Daten (16 Bytes=8 Word´s) - jedes ankommende Byte wird in das Einlesearray geschrieben - danach werden alle Bytes um eine Stelle im Array verschoben - wenn an den letzten 5 Stellen im Array der Header erscheint (natürlich in umgekehrter Reihenfolge, einfache Abfrage mit IF) ist ein kompletter Datensatz empfangen - dieser Datensatz wird dann mit Hilfe der o.a. Variablen wieder in Word Variablen umgewandelt, dann noch mit Faktoren multipliziert und letztendlich auf dem Display angezeigt. Das ganze soll übrigens eine Telemetrielösung für meinen Minilogger am Modell-Hubi werden. Ist eine klasse Möglichkeit, sich in die Materie einzuarbeiten und zu lernen ! Gruss Volker
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.