PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Großes mehrdimensionales Array in Bascom--Wie??



moin
06.07.2007, 20:56
Hallo,
auch wenn ich weiß, dass US-Sensoren einen großen Winkel haben will ich versuchen ein Zimmer zu erfassen und im Speicher des Roboters abzubilden.
Hierfür benötige ich in der ersten Ausbaustufe ein 200*200 Array mit einer Speichertiefe von einem Byte. In der zweiten Ausbaustufe soll das Array die Dimension von 400*400 haben. #-o
Der 1 Byte große Wert soll für die Wahrscheinlichkeit stehen, mit der dort ein Objekt zu finden ist.

Für das erste Stadium ist meine Idee ein ATMEGA128 mit externem SRAM (512k) und nur die letzen drei Adressleitungen an einen der freien Port anzuschließen. Die Ansteuerung eines übergroßen Speicherbereiches habe ich bisher nur in Assembler gemacht und weiß nicht welche Tücken ich bei BASCOM zu erwarten habe, das ich den Zugriff auf untere Adressbereiche bei der Umschaltung von Adressbereichen nicht unter Kontrolle habe :-( (ist das so??)
Ach ja: Eine Echtzeitverarbeitung erwarte ich natürlich nicht von diesem Projekt und der ATMEGA128 soll nicht für die allgemeine Steuerung des Roboters verwendet werden. Das allgemeine Programm sollte eigentlich in BASCOM geschrieben werden (meinetwegen auch InlineAssembler). Für eine reine Assemblersteuerung bin ich eigentlich zu faul #-o , da ich dann auch die Schnittstelle zum Roboter und die Berechnungen innerhalb des Arrays in Assembler programmieren müsste.

An dieser Stelle meiner Überlegungen benötige eure Meinung zu diesem Projekt. Welchen Lösungsweg würdet ihr wählen?
Danke

P.S.: Wenn dieser Beitrag im falschen Unterforum gepostet wurde - bitte verschieben.

Dnerb
06.07.2007, 21:44
Ich würde die ganze Sache mit dem Array in Assembler lösen.
Externen Speicher habe ich auch shcon angeschloßen (512K) und habe das Speicherinterface links liegen lassen und alles "von Hand" gemacht. War bei mir mit ienem ATmega162.

oe9vfj
07.07.2007, 09:32
Wie in der vorigen Antwort gesagt, wirst Du hier um eine Implementierung im Assembler nicht umhin kommen. Assembler-Code is relativ leicht in BASCOM einzubinden. In Deinem Fall würde ich zwei Funktionen (SUB/FUNCTION) in BASCOM erstellen.

Die erste Funktion (SUB) zum Abspeichern eines Array-Wertes übernimmt 3 Parameter (Array-Dimension1, Array-Dimension2 und Wert). In der SUB selbst kannst Du die 3 Parameter übernehmen und in Assembler weiterverarbeiten, bzw. den Wert an der entsprechenden Stelle im externen SRAM ablegen.

In der zweiten Funktion (FUNCTION) zum Auslesen eines Array-Wertes werden 2 Parameter (Array-Dimension1, Array-Dimension2) übergeben. Der Assemblerteil holt den entsprechenden Wert aus dem externen SRAM und übergibt ihn als Rückgabewert für die Funktion.

Sofern die Größe einer Dimension 256 überschreitet, musst Du mit Word-Variablen für die Array-Dimension arbeiten.


Siehe dazu in der Hilfe unter MIXING Assembler with BASCOM (oder so ähnlich) und dem Befehl LOADADR.