Forum: Mikrocontroller und Digitale Elektronik MSP430: Mehrere Variablen hintereinander in feste RAM-Adresse


von S. L. (wostl)


Lesenswert?

Hallo zusammen,

ich benutze einen MSP430F5438A. Mit diesem will ich via DMA Daten aus 
dem RAM zum UART schicken.
Diese Daten werden in verschiedenen Variablen abgelegt. Ist es möglich, 
diesen Variablen eine feste Adresse im RAM zuzuweisen, sodass alle 
direkt hintereinander im RAM abgelegt sind?
Durch die festen Adressen kann ich dann dem DMA-Controller die 
Startadresse und die Blockgröße mitteilen und dieser kann anschließend 
die Daten an den UART schicken.


Danke für eure Hinweise!
Wostl

von Dummschwaetzer (Gast)


Lesenswert?

typ variablenname@adresse;

von hinweiser (Gast)


Lesenswert?

Hallo Wostl,

... sehr präzise Beschreibung Deiner Entwicklungsumgebung! - Nein, Spaß 
beiseite, folgendes könnte Dir helfen:

Ich lege die Positionen der Variablem oder Konstanten wie folgt fest.

**************
            RSEG    DATA16_N
            EVEN
nextTACCR1  DS16    1                       ; var contains data for next 
update
nextTACCTL1 DS16    1                       ; var contains info about 
interrupt
branchAddr  DS16    1                       ; address container for next 
branch
branchTaIsr DS16    1                       ; address for TA service 
routine
memData
lfsr16      DS16     1                      ; 16 bit for pseudo random
ledPtr      DS16    LED_COUNT               ; ptr into the wavedata 
field
ledStep     DS16    LED_COUNT               ; number of remaining steps
ledEnergy   DS16    LED_COUNT               ; energy resource
ledWave     DS8     LED_COUNT               ; selected wave
memDataEnd

************** ... usw.

Sieh Dir einmal in der Defintionsdatei zu Deinem Prozessor an 
("CONFIG\lnk430F2121.xcl"), welche Adressen möglich sind.

Neben DATA16_N findest Du weitere Definitionen. Darüber sollte es 
funktionieren.

Viel Erfolg und Gruß

Bernd

von S. L. (wostl)


Lesenswert?

hinweiser schrieb:
> Hallo Wostl,
>
> ... sehr präzise Beschreibung Deiner Entwicklungsumgebung! - Nein, Spaß
> beiseite, folgendes könnte Dir helfen:
>

Hallo Bernd,

da hast du natürlich Recht, habe ich im Eifer des Gefechts glatt 
vergessen: Ich benutze IAR, und die Variablen haben eine Integer 
Struktur mit 8byte. 16 dieser Variablen sollen hintereinander 
abgespeichert werden.

von Michael .. (gismi)


Lesenswert?

1
struct
2
{
3
  uint8_t d[8];
4
}Daten[16];

von Pragmatiker (Gast)


Lesenswert?

Beispiel für 16bit Daten:

{
   u16 *dst = (u16*); // deklariert einen Zeiger auf eine 16bit adresse.

   dst = 0x00200000;  // hardware destination address
            // dieser Zeiger muss auf einen gültigen RAM Bereich zeigen.
            // abhängig vom Speicherlayout, siehe Momory mapping im
            // Linker Command File 28xxx*.lnk.cmd

   *dst = 0x11; //Wert 0x11 in die Speicheradresse 0x00200000 schreiben
   dst++;
   *dst = 0x22; //Wert 0x22 in die Speicheradresse 0x00200002 schreiben
}

von Dummschwaetzer (Gast)


Lesenswert?

>Diese Daten werden in verschiedenen Variablen abgelegt. Ist es möglich,
>diesen Variablen eine feste Adresse im RAM zuzuweisen, sodass alle
>direkt hintereinander im RAM abgelegt sind?
struct{}datenname;
>Durch die festen Adressen kann ich dann dem DMA-Controller die
>Startadresse
&datenname

von Kein Name (Gast)


Lesenswert?

> struct
> {
>   uint8_t d[8];
> }Daten[16];

Endlich mal ein Thema für die guten alten Precompiler-Tricksereien.

#define minWerte Daten[0].d
#define maxWerte Daten[1].d
...

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.