mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430: Arrays realisieren?


Autor: Daniel Simic (daniel72)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel Simic (daniel72)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Stefan (Gast)
Datum:

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

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel Simic (daniel72)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.