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; }
Hi Dieter, sieh dir mal die memory-organization im Dtenblatt an... 4 Bänke a' 32 kB.
Hallo ist die CPU Auswahl bei deinem Compiler richtig? Der Compiler muss im MSP430X Modus sein und das Speichermodel muss auf large stehen damit die Pointer größer als 2Byte sind.
Zur Kontrolle: lass Dir mal im Debugger das Ergebnis von sizeof (int *) anzeigen. Da muss was anderes als zwei ("2") rauskommen.
Rufus Τ. Firefly schrieb: > sizeof (int *) > > Da muss was anderes als zwei ("2") rauskommen. Warum? 16 Bit Core, also 2 Byte pro Integer.
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.
Dosmo schrieb: > Bei Harvard-CPUs muß man manchmal auch noch zwischen RAM und Flash > unterscheiden. Zum glück ist der MSP430 keine.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.