MSP430F5529 Flashpointer zu klein

#2468585
Lesenswert?

Hallo Zusammen.
Ich versuche zur Zeit in den Flashspeicher meines MSP430F5529 zu 
schreiben.
Teilweise funktioniert es. Aber leider nicht immer.
Wenn die Adresse des zu beschreibenden Wertes einen Int (2Byte) also 
65536 überschreitet, speichert mein Pointer keine Werte mehr.
Egal von welchem Typ(Char, Int, Long).
Wie macht ihr das?
Ich habe die Codebeispiele von TI verwendet. Aber auch hier funktioniert 
das mit den höheren Adressen nicht mehr.
Danke für euro Hilfe

Mein Programm:


#include <msp430f5529.h>

unsigned int *adresse;
// Function prototypes
void write_SegC(void);

void main(void)
{
  WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT
  while(1)
  {
     adresse = (unsigned int *) 0x4401;
     write_SegC();
    //adresse = write_SegC(adresse);
  }
}

//---------------------------------------------------------------------- 
--------
// Input = value, holds value to write to Seg C
//---------------------------------------------------------------------- 
--------
void write_SegC(void)
{

  unsigned int i;
  FCTL3 = FWKEY;                            // Clear Lock bit
  FCTL1 = FWKEY+ERASE;                      // Set Erase bit
  *adresse = 0;                           // Dummy write to erase Flash 
seg
  FCTL1 = FWKEY+WRT;                        // Set WRT bit for write 
operation
  for (i = 0; i < 128; i++)
  {
    *adresse++ = i;                   // Write value to flash
  }
  FCTL1 = FWKEY;                            // Clear WRT bit
  FCTL3 = FWKEY+LOCK;                       // Set LOCK bit
  //return adresse;
}
Gast #2470109
Lesenswert?

unsigned schrieb:
>> sizeof (int *)
>>
>> Da muss was anderes als zwei ("2") rauskommen.
>
> Warum? 16 Bit Core, also 2 Byte pro Integer.

Nicht Integer, sondern Zeiger auf Integer.
Wenn ein Zeiger nur 2 Byte groß ist, kann man nur 64k addressieren. 
Deswegen gibt es auch auf manchen System die FAR und HUGE Zeiger. Bei 
Harvard-CPUs muß man manchmal auch noch zwischen RAM und Flash 
unterscheiden.
#2471727
Lesenswert?

Danke an die vielen Antworten.
Also es war das Speichermodell. Man muss es auf large umstellen. An 
dieser Stelle vielen Dank an Tx2000.
Funktioniert wunderbar.
Für alle andern die das selbe Problem haben.
Im CodeComposer Studio rechte Maustaste auf das Projekt. Dann 
Properties.
Im Register CCS Build dann MSP430 Compiler und dann Processor Optionnen 
und hier die Optionen auf advanced umstellen und dann bei code memory 
model auf large. Schon sind die Pointer 4 Byte groß und alles 
funktioniert.
Danke
Frohe Weihnachten

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