mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 ASM Datenstrukturen


Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie vereinbart man im IAR-ASM für den MSP430 eine Datenstruktur?

Wenn ich es so mache:
ORG    0
I1:    DS8    1
I2:    DS8    1

ORG    0
C1:    DS8    1
C2:    DS8    1

dann mault der Linker, bei C1:

   Different parts of ASEG have overlapping code

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

leider habe ich weder IAR noch MSP430 bisher eingesetzt. Aber die 
wiederholte Nutzung von ORG auf derselben Adresse kann kein mir 
bekannter Assembler durchgehen lassen.

Gibt es kein .equ, .equiv oder sowas, womit du Adressen neu benamen 
kannst?

Gruß,
Edson

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meister Eder schrieb:
> leider habe ich weder IAR noch MSP430 bisher eingesetzt. Aber die
> wiederholte Nutzung von ORG auf derselben Adresse kann kein mir
> bekannter Assembler durchgehen lassen.

Zu seeligen 8080-Zeiten haben wir das immer so gemacht...

> Gibt es kein .equ, .equiv oder sowas, womit du Adressen neu benamen
> kannst?

Doch, das gibts, aber das ist doch ein Murx.

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Zu seeligen 8080-Zeiten haben wir das immer so gemacht...

Naja, der zählt für mich zu den Unbekannten.


>Doch, das gibts, aber das ist doch ein Murx.

Warum, was hast du denn vor?

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn dus mit EQU machst, must du die Offsets der Labels absolut angeben.

Wenn man jetzt aus irgendwelchen Gründen die Reihenfolge ändern muß, 
dann stimmt nichts mehr und man muß die Offsets neu ausrechnen.

Wenn man es mit ORG machen könnte, dann müßte man nur die betreffende(n) 
Zeile(n) verschieben und den Rest besorgt der ASM.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Macros kann man sich was basteln, was es tut:

STRUCT  MACRO  name
LEVEL$  SET  0
  ENDM

ALLOC  MACRO  name, length
name:  EQU  LEVEL$
LEVEL$  SET  LEVEL$+length
  ENDM

PADDING  MACRO  modul
  IF LEVEL$ % modul != 0
  LEVEL$:  SET  (LEVEL$ + modul) & ~ (modul - 1)
  ENDIF
  ENDM

; PLD_Data
  STRUCT PLD_Data
  ALLOC  PLD_Timer,            2
  ALLOC  PLD_State,            2
  ALLOC  PLD_RepCount,         1
  ALLOC  PLD_DtFlags,          1

; PLD_Header
  STRUCT PLD_Header
  ALLOC  PLD_DataPtr,          2
  ALLOC  PLD_DescList,         2
  ALLOC  PLD_t1SyncThreshold,  2
  ALLOC  PLD_Initializer,      2
  ALLOC  PLD_Setup,            2
  ALLOC  PLD_InterruptMask,    1
  PADDING  2
  PLD_HeaderLength:  EQU  LEVEL$


Es werden zwei Strukturen PLD_Data und PLD_Header definiert

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim MPASM gibt es die Anweisung udata_ovr, die überlappende 
Datenbereiche zulässt. In der IAR Doku hab ich auf die Schnelle nichts 
vergleichbares finden können(zum 1.mal reingeschaut). Dein Beispiel aus 
dem ersten Post sähe dann so aus:

same_var udata_ovr 0x80
i1   res 1
i2   res 1

same_var udata_ovr 0x80
c1   res 1
c2   res 1


Gegenüber deinem Makro sieht das doch richtig übersichtlich aus. Klar, 
hilft hier nix - aber du hast ja schon eine Lösung gefunden.

Grüße,
Edson

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das letzte Beispiel für die Anwendung meiner Macros ist aus dem echten 
Leben.

Mein Beispiel vom Eingangsposting würde damit so aussehen:
; Struct I
       STRUCT I
       ALLOC  I1, 1
       ALLOC  I2, 1

; Struct C
       STRUCT C
       ALLOC  C1, 1
       ALLOC  C2, 1

Ist also auch nicht so viel unbersichtlicher, als die Syntax von MPASM.

Wobei der PADDING-Macro wohl besser so aussehen sollte:
PADDING  MACRO  modul
  IF LEVEL$ % modul != 0
  LEVEL$:  SET  (LEVEL$ + modul - 1) & ~ (modul - 1)
  ENDIF
  ENDM

modul muß eine 2er-Potenz sein.

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.