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
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
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 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.