Forum: Mikrocontroller und Digitale Elektronik Errorhandling STMCube HAL Interrupt und RTOS


von Guest (Gast)


Lesenswert?

Hallo zusammen.

Ich bin gerade dabei einige Treiberfunktionen zu implementieren und habe 
ein problem in sachen Error Handling in Verbindung mit stm cube.

Anhand des I2C-Interface will ich das kurz erläutern.
Vorab. die Kommuikation funktioniert schon. Ich verwende auf der 
untersten ebene die Interruptgesteuerten Funktionen der HAL von STM.

HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef * hi2c, 
uint16_t DevAddress, uint8_t *
pData, uint16_t Size)

Ich verwende FreeRTOS und sperre die Ressource während einer 
Kommunikation mit einer binären Semaphore.
In der End of Communication Callback gebe ich das Interface wieder frei.

Wie gesagt alles funktioniert... Ich wollte jetzt mal die ErrorCallback 
untersuchen und habe mal während des Betriebs den I2C Bus unterbrochen.
Zu meinem erstaunen wurde die Errorcallback nicht aufgerufen sondern 
immer die End of Communication. Lese ich dort den Status aus, steht der 
richtigerweise auf BUSERROR.
Ich hätte hier erwartet, dass die ErrorCallback aufgerufen wird...(Ich 
untersuche das nochmal)

Nun zum Kern meiner Frage. Wenn ich Interruptgetriebene 
Kommunikationsmodelle verwende und eine Kommunikation geht schief, dann 
muss ich irgendwie sicherstellen, dass ein erneuter Sendeversuch 
unternommen wird oder unter umständen das Interface Resetiert wird.

Wie kann ich das in Verbindung mit einem RTOS sicher und sauber 
gewährleisten? Das Problem ist ja, dass ich im Applikationscode 
weiterarbeite und da ich momentan nur die Ressource schütze.

Ein Ansatz wäre, zusätzlich zur Ressourcenkontrolle per Semaphor ein 
Event in der ISR zu setzen, auf welches ich dann im Sendetask gezielt 
reagieren kann. Ich befürchte aber, dass ich alles zu kompliziert 
mache..
Was ich auf keinen Fall möchte ist das Interface pollen....

Hat jemand anregungen für mich?

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.