MSP430: Arrays realisieren?

OP #1085740
Lesenswert?

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
OP #1085755
Lesenswert?

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
Gast #1085777
Lesenswert?

>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!
#1085840
Lesenswert?

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.
#1086602
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren