Forum: Mikrocontroller und Digitale Elektronik Speichermanipulation FLASH - STM32F411CEU


von Timbo2023 (timbo2023)


Lesenswert?

Guten Tag,



der Sektor 7 (Adressbereich: 0x08060000-0x0807FFFF) soll im Wort 1 und 2 
mit einer Matrix (25 Reihen, 2 Spalten) aufsteigend zur Adresse 
beschrieben werden, Wort 3 und 4 sollen vorerst frei bleiben.

Ich habe das wie folgt versucht:

 float Data[25][2];
 uint32_t Adr = 0x08060000;

    for(i=0; i<25;i++)
    {
      Flash_Write_Data(Adr, Data[i][0], 2);
      Flash_Write_Data(Adr, Data[i][1], 2);
      Adr++;
    }


Mein Ziel damit ist es, das Wort 1 der Adresse mit Data[i][0] und Wort 2 
mit Data[i][1] zu beschreiben. Anschließend wird die Adresse 
inkrementiert und der Schritt wiederholt sich.

(1)
Wie kann ich dies erreichen?

(2)
Kann ich perspektivisch das Wort 3 und 4 der jeweiligen Adressen separat 
beschreiben?



Gruß
timbo2023

von Harald K. (kirnbichler)


Lesenswert?

Timbo2023 schrieb:
> das Wort 1 der Adresse

Was soll das sein?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Timbo2023 schrieb:
1
> for(i=0; i<25;i++)
2
> {
3
>   Flash_Write_Data(Adr, Data[i][0], 2);
4
>   Flash_Write_Data(Adr, Data[i][1], 2);
5
>   Adr++;
6
> }
Fehler 1:

Das zweite Flash_Write_Data wird mit demselben Wert von Adr aufgerufen 
und überschreibt damit den ersten Vorgang.

Fehler 2:

Jeder Aufruf von Flash_Write_Data() schreibt jeweils 2 Byte, also 
insgesamt 4 Byte. Die Adresse wird jedoch nicht um 4 erhöht, sondern nur 
um 1.

Fehler 3:

Das 3. Argument mit dem Wert 2 setzt voraus, dass sizeof(float) exakt 2 
Bytes benötigt. Das kann man portabler schreiben - egal, ob diese 
Voraussetzung richtig oder falsch ist.

Vorschlag:
1
for(i = 0; i < 25; i++)
2
{
3
  Flash_Write_Data(Adr, Data[i][0], sizeof (float));
4
  Adr += sizeof (float);
5
  Flash_Write_Data(Adr, Data[i][1], sizeof (float));
6
  Adr += sizeof (float);
7
}
Ich kenne die Funktion Flash_Write_Data() nicht, ist die von Dir? Wenn 
die mit größeren Brocken klarkommt, reduziert sich das auch auf eine 
Zeile:
1
  Flash_Write_Data(Adr, Data, sizeof (Data));

: Bearbeitet durch Moderator
von Harry L. (mysth)


Lesenswert?

gähn...und täglich grüsst das Murmeltier...

Da du offensichtlich nicht willens und/oder in der Lage bist, die Doku 
zu lesen und zu verstehen, kannst du das gar nicht.

von Sebastian R. (sebastian_r569)


Lesenswert?

Wie läuft's eigentlich mit deinem Thermoelement?

von Timbo2023 (timbo2023)


Lesenswert?

Von Ihnen habe ich ja lange nichts gehört Sebastian R. -

Ist ein wenig "Bastelarbeit".

Aber die Kommentare zur Seite, ich muss erst einmal eine Weiterbildung 
zu den HAL-Treibern machen, damit ich die mittels ADC aufgenommenen 
Werte auch richtig deuten kann.


Zu Frank M.

Mit der Antwort auch in diesem Stil kann ich weitermachen - sehe ich 
schon - ich werde berichten. Die Unterfunktion ist von einem wohl 
Pakistani o. ä. aus dem Internet, scheint aber zu funktionieren, werde 
ich auch noch ändern...

Angenehmen Tag Ihnen
timbo2023

: Bearbeitet durch User
von Timbo2023 (timbo2023)


Lesenswert?

Ergänzend:



Sagen Sie, ich nutze die STM32CubeIDE.

Kann man eine Löschung des Speichers zu Beginn hinterlegen? D. h. vor 
dem Programmabruf?

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.