Forum: Compiler & IDEs STM32 - Alignmentproblem?


von Lasse S. (cowz) Benutzerseite


Lesenswert?

Hallo,

ich habe ein komisches Problem: Ich nutze einen STM32 um mittels SPI ein 
Display anzusteuern. Das funktionierte soweit ohne Probleme. Als ich 
aber an einem (ganz) anderen Codeteil arbeitete funktionierte das 
Display plötzlich nicht mehr.

Ich konnte das Problem beheben, indem ich vier NOPs eingefügt habe. Füge 
ich sie im Code an beliebiger Stelle (allerdings vor die "Grenzzeile") 
funktioniert es. Füge ich sie im Code nach der Grenzzeile ein, 
funktioniert es nicht.

Dabei ist die Stelle komplett beliebig wählbar, ich habe es anhand des 
Listings ausprobiert.
1
void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data)
2
{
3
  /* Check the parameters */
4
  assert_param(IS_SPI_ALL_PERIPH(SPIx));
5
6
  /* Write in the DR register the data to be sent */
7
  SPIx->DR = Data; // <= Dies ist die magische Grenzzeile
8
}

Jetzt nutze ich das SPI einfach direkt, ohne den Zwischenaufruf der 
Funktion. Der Fehler verwundert mich aber dennoch und ich würde die 
Ursache gerne kennen.


Viele Grüße
Lasse

von Matthias K. (matthiask)


Lesenswert?

Vermutlich wird im Speicher was überschrieben. Wenn Du die Funktion 
direkt einbindest landet sie an einer anderen Stelle im Flash.

von Lasse S. (cowz) Benutzerseite


Lesenswert?

Aber das darf dem Linker doch eigentlich nicht passieren, oder?

von Matthias K. (matthiask)


Lesenswert?

Der Linker wird das schon korrekt machen. Aber die RAM-Belegung kann 
eine andere sein, von der Reihenfolge her. Wahrscheinlich liegt der 
Fehler in einer anderen Fkt., vermutlich ein Array oder Zeigerproblem. 
>Glaskugel

von Lasse S. (cowz) Benutzerseite


Lesenswert?

Die Funktion liegt aber im Flash. Und: Auch wenn ich die NOPs hinter der 
Funktion anlege funktioniert das ganze. Daher kann die Verschiebung 
wirklich nur Einfluss auf die markierte Zeile haben.


edit: Welche Informationen soll ich bereitstellen, damit die Glaskugel 
wieder eingepackt werden kann?

von Matthias K. (matthiask)


Lesenswert?

Problem liegt bestimmt nicht im Flash, sondern im RAM. Vermutlich wird 
irgendwas überschrieben.

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.