Hallo, ich habe ein kleines Problemchen mit meinen Ring Buffer. Für die USB Schnittstelle habe ich jeweils für RX und TX einen Separaten Ring Buffer. Dabei sind RX und TX Interrupt gesteuert. Das Problem tritt beim TX-Buffer auf, der Interrupt- und der Normale-Prozess greifen beide auf die gleiche Variable zu und es kommt zu Datenschrott. Tritt zwar selten auf, aber es kommt halt vor. Beim AVR würde ich mit cli() sei() solange den Interrupt deaktivieren, wie macht man das am geschicktesten beim STM32?
Innerhalb der kritischen Zone das BASEPRI-Register auf den Level des UART-Interrupts setzen (=> CMSIS Funktion). Sperrt alle Interrupts bis zu diesem Level, lässt höher priorisierte aber durch. Siehe dazu auch BASEPRI_MAX, falls sich sowas verschachteln sollte. Alternativ lassen sich auch die jeweiligen Interrupts im NVIC sperren, und natürlich kann man mit der Holzhammer-Methode auch die Interrupts ganz abklemmen.
@ A. K. (prx) Ich habe es jetzt mit NVIC probiert, und es hat geklappt. Danke für den Tipp.
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.