Speichermanipulation FLASH - STM32F411CEU

OP #7442477
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;

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
}

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

Moderator Persönliche Seite #7442496
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));
OP #7442502
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

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