32-Bit-Speicherzugriff

OP #2713199
Hallo zusammen

Ich stehe gerade ziemlich auf dem Schlauch...

Ich lese mittels SPI einen Datenstrom ein. Dieser wird mittels DMA 
direkt in einen grossen 8-Bit-Buffer kopiert, was auch sehr gut 
funktioniert.

Jetzt möchte ich gerne eine 32-Bit-Präambel in meinem Speicher suchen. 
Ich dachte ich könnte einfach mit einer 32-Bit-Variablen auf den 
Speicher zugreiffen und so mit meiner Präambel vergleichen:

uint8_t SPI_SLAVE_Buffer_Rx[BufferSize_RX];
uint32_t *RX_zwischenBuffer = 0;

SPI_SLAVE_Buffer_Rx[0]=0xFF;
SPI_SLAVE_Buffer_Rx[1]=0xF0;
SPI_SLAVE_Buffer_Rx[2]=0x0F;
SPI_SLAVE_Buffer_Rx[3]=0x00;
RX_zwischenBuffer=(uint32_t *)SPI_SLAVE_Buffer_Rx;

RX_result_Buffer=*RX_zwischenBuffer^Barker_Korr_Reg;

Das Problem ist jedoch, dass die Speicherorganisation beim STM32 
anscheinend nicht ganz so ist wie ich es mir erwünsche. Anstatt der 
0xFFF00F00 (oder das gespiegelte) kriege ich 0xFF0FF. Ich denke dies 
irgendwas mit LowByte-HighByte oder so zu tun.
Natürlich könnte ich die einzelnen Bytes manuell mit schieben an die 
richtige Stelle des Buffers legen, doch dies möchte ich eigentlich aus 
Zeitgründen vermeiden.

Kennt jemand eine Möglichkeit, wie ich direkt die 32 Bit in meinen 
Buffer kriege?

Freundliche Grüsse
#2713216
R. K. schrieb:
> SPI_SLAVE_Buffer_Rx[0]=0xFF;
> SPI_SLAVE_Buffer_Rx[1]=0xF0;
> SPI_SLAVE_Buffer_Rx[2]=0x0F;
> SPI_SLAVE_Buffer_Rx[3]=0x00;

> kriege ich 0xFF0FF
Was willst du denn sonst kriegen?
Das ist Little Endian, Low Byte First.
Setz' das doch einfach mal zusammen:

FF aus Rx0 >> FF
+ F0 aus Rx1 >> F0FF
+ 0F aus Rx2 >> 0FF0FF
+ 00 aus Rx3 >> 000FF0FF
Und die führenden Nullen sparen wir uns halt: FF0FF.

mfg.
OP #2713270
Ok, vielen Dank für die super schnelle Fehlerlösung!

Ich habe meinen Fehler gefunden. Ich habe beim SPI-senden und bei SPI 
empfange die LSB-MSB-Rehenfolge vertauscht... Der Fehler war also nur 
indikert im Speicher

So wurde aus meinem 0xF0 ein 0x0F und aus 0x0F ein 0xF0. das resultierte 
in meiner 0x0FF0 statt 0xF00F

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.