Gast
#4200878
Hallo, ich bin gerade am Grübeln, wie man einen USB Stack am elegantesten in ein RTOS (im konkreten Fall "FreeRTOS") einbindet. Der Mikrocontroller ist ein STM32. Zum Glück bietet ST da schon den passenden USB Stack an. (Auch wenn er etwas buggy ist). Die USB Hardware des Mikrocontrollers liefert ja bei jedem Paket einen Interrupt auf den der USB Stack dann aufsetzt. Ohne RTOS läuft also jeglicher Code, der mit USB Transaktionen zu tun hat, direkt im Interrupt Handler. Da ich aber noch das RTOS laufen habe, finde ich diese Herangehensweise etwas kontraproduktiv, da so ein nicht unerheblicher Teil meines Codes außerhalb des RTOS contextes ausgeführt wird. Etwas schöner wäre meiner Meinung nach die Alternative den kompletten USB Stack innerhalb eines Tasks (mit max. Priorität) zu halten. Dieser würde dauerhaft schlafen und auf eine Semaphore warten. Der USB Interrupt Handler macht dann nichts anderes als diese Semaphore zu geben und des Task somit aufzurufen. Wie wird das denn "normalerweise" gemacht. Interessant wäre auch zu wissen, wie das in den großen Betriebssystemen gemacht wird. (Linux, Windows, OSX) Grüße