Forum: Mikrocontroller und Digitale Elektronik MSP430: Arrays realisieren?


von Daniel S. (daniel72)


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

von Christian R. (supachris)


Lesenswert?

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.

von Daniel S. (daniel72)


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

von Stefan (Gast)


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!

von Stefan (Gast)


Lesenswert?

OK... der MSP legt nix ins RAM ab... ausser den Stack, der wird aber im 
RAM von oben/hinten aufgefüllt!

von Uhu U. (uhu)


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.

von Daniel S. (daniel72)


Lesenswert?

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

von Uhu U. (uhu)


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.

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
Noch kein Account? Hier anmelden.