Hallo Zusammen, Ich habe eine reihe von Werten, durch die ich mich mit zwei Taster (Up/Down) bewegen soll. So etwas würde ich in einer Programmiersprache einfach mit Arrays programmieren und bei Up Tastebestätigung den Index der Array erhöhen, bzw. verkleiner wenn man die Down Taste betätigt. Wie kann ich so was mit ASM machen? Es wäre relativ einfach wenn ich die Start-Adressen in ein Register speichern würde und dann den Inhalt inkrementiere bzw. dekrementiere wobei ich in einem bestimmten Adressbereich meine Werte ablegen würde. Mein Problem ist, dass ich keine Ahnung habe welchen Adressbereich ich verwenden darf (etwa ab 0200h?)? Und was passiert, wenn mein Programm genau in dem Bereich abgelegt wird, den ich für meine Daten verwende? Für eine Aufklärung bedanke ich mich im Voraus. Gruss
Hm, gibts einen zwingenden Grund, Assembler zu benutzen? Die MSP430 sind extra für C gemacht, was auch die Kompiler sehr gut ausnutzen. Das geht aber in ASM natürlich auch, dazu gibts den Index-Adressiermode. In C ginge das natürlich komfortabler. Welchen Speicherbereich der RAM einnimmt, kannst du im Datenblatt nachlesen.
Eben da steht dass der RAM ab 0200h beginnt. Flash ROM endet bei 0FFDFh, aber es steht nicht wie gross er ist. Interruptvektortabelle beginnt bei 0FFE0h und geht bis 0FFFh. 16-Bit Peripheral Modules sind zwischen 0100h und 01FFh, 8-Bit Per. Modules sind zwischen 010h und 0FFh und Special Func Register sind zwischen 0h und 0Fh. Mir geht es darum zu wissen, ob MSP430 irgendetwas ab 0200h ablegt, weil dadurch würde ich es mit meinen Daten überschreiben! Gruss
>Mir geht es darum zu wissen, ob MSP430 irgendetwas ab 0200h ablegt, weil >dadurch würde ich es mit meinen Daten überschreiben! Nein, der MSP430 legt da nix ab! Wenn Du in ASM programmieren willst, dann bestimmst Du, an welcher Stelle Variablen liegen und wo nicht! Im Übrigen, ab 0x200 liegt der RAM. Das hat rein gar nichts mit dem Flash-Speicher und auch nichts mit dem Adressbereich der Peripherals zu tun!
OK... der MSP legt nix ins RAM ab... ausser den Stack, der wird aber im RAM von oben/hinten aufgefüllt!
Sind die Werte in dem, das du in einer Programmiersprache als Array implementieren würdest, konstant, oder werden die Werte verändert? Wenn sie nicht verändert werden, kannst du sie auch ins Flashmemory legen. Ich würde das in ASM folgendermaßen machen: - Den Datenbereich im RAM oder Flash reservieren und labeln - Ein Register als Zeiger in den Datenbereich mit dem Label laden - Wenn die UP-Taste kommt: das Regeister um die Datenlänge in Byte inkrementieren - Wenn die DOWN-Taste kommt: das Regeister um die Datenlänge in Byte dekrementieren Das Äquivalent für diese Methode in C ist die Array-Adressierung per Pointer. Die Pointerarithmetik weiß dann, was in-/decrementieren des Pointers bedeutet.
Danke. Ich habe es Gestern genau so gemacht. Jedoch weiss ich nicht wie ich den Adressbereich 'reservieren' kann? Angefangen habe ich ab der Adresse 0200h. Gruss
Das sind die DS*- / DW, etc. Direktiven, z.B. DS8 1 reserviert 1 x Platz für 1 Byte (8 Bit) Diese Direktiven müssen im passenden Segment stehen, also für das RAM z.B. RSEG DATA16_Z Sie reservieren einfach ab dem Freispeicher-Zeiger des Assemblers für das betreffende Segment so viel Platz, wie benötigt wird und setzen den Freispeicher-Zeiger dahinter. Beim MSP430 mußt du beachten, daß Worte nur von geraden Adressen zugegriffen werden können.
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.