STM32+FreeRTOS

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Andax
Inlägg: 4373
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

STM32+FreeRTOS

Inlägg av Andax »

Är det några här som kör FreeRTOS på STM32?
Användarvisningsbild
JonasJ
Inlägg: 653
Blev medlem: 11 september 2007, 16:02:26
Ort: Kinna
Kontakt:

Re: STM32+FreeRTOS

Inlägg av JonasJ »

Ja! :)

Jag använder FreeRTOS i mitt robotgräsklippare-projekt tillsammans med en STM32F446RE. Jag är långt ifrån en expert på det men var det något särskilt du ville veta?
Användarvisningsbild
Andax
Inlägg: 4373
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: STM32+FreeRTOS

Inlägg av Andax »

Jag har kört STM32 med HAL innan. Nu har jag lagt till FreeRTOS via STM32CubeMX. Dock funkar det inte som jag tänkt. Jag har en semafor som jag väntar på i en tråd mha osSemaphoreWait.

När när en SPI interrupt kommer så släpper jag semaforen i interrupt-callbacken mha osSemaphoreRelease. Dock verkar den falla igenom osSemaphoreWait i tråden direkt och inte vid tidpunkten som callbacken släpper semaforen.

Jag har kollat med en logikanalysator genom att sätta en pinne när den faller igenom osSemaphoreWait och när den gör osSemaphoreRelease i callbacken och där ser man tydligt att den faller igenom semaforen direkt i tråden och först en lång stund senare (typ 40 millisekunder) anropas callbacken. Erase i flashet är ganska långsamt så det ska ta ca 40 millisekund vilket verka stämma.
Användarvisningsbild
JonasJ
Inlägg: 653
Blev medlem: 11 september 2007, 16:02:26
Ort: Kinna
Kontakt:

Re: STM32+FreeRTOS

Inlägg av JonasJ »

Jag har lyckats undvika semaforer helt i mitt projekt (hittills) men jag kör FreeRTOS via CubeMX och det har fungerat väldigt bra. Vilken version av FreeRTOS kör du?

Det finns flera funktioner som är speciellt designade för att användas i interrupt-rutiner. Dessa brukar sluta med *FromISR. Vet inte om det är problemet här men kanske värt att testa om du inte har det. Jag kan se om jag kan göra ett litet testprogram men det hinner jag nog först till nästa helg. Annars finns det säkert någon på forumet som kan hjälpa till med tips på felsökning.
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Re: STM32+FreeRTOS

Inlägg av Wedge »

OS-abstraktionen i CMSIS tar hand om att anropa "FromISR"-varianterna där så behövs, men det är en förskräcklig massa kod inblandat i semaforerandet, och i synnerhet om man använder CMSIS abstraktionslager ("os"-whatever). Undvik det i interruptrutiner.
För att synka mellan interrupt och tråd är det bättre att använda notification istället för semafor. https://www.freertos.org/RTOS-task-notifications.html
Användarvisningsbild
Andax
Inlägg: 4373
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: STM32+FreeRTOS

Inlägg av Andax »

Nu har jag testat notifications och det verkar funka. Dock är det en liten detalj som gör att jag tror ST portat FreeRTOS felaktigt. Den verkar nämligen inte göra context-switchen direkt efter notification i ISR utan verkar ske vid nästföljande ”tick”. Jag tittar på debug-pinnar med en logikanalysator när interrupten kommer, och när tråden fått notifieringen och tråden verkar starta med en tidsskillnad av precis en multipel av 1 ms.
Användarvisningsbild
Wedge
Inlägg: 1026
Blev medlem: 8 juli 2012, 17:33:33

Re: STM32+FreeRTOS

Inlägg av Wedge »

Det är nog mer troligt att du gör fel nånstans. Jag har ett task som gör notification-väntan på 16 AD-omvandlingar och några timers varje millisekund. FreeRTOS 9.0.0 med ST-portning, instoppat i projektet av STM32CubeMX, kört på STM32F217. Funkar klockrent, i princip saxat direkt ur exemplen FreeRTOS visar.
Om ditt task körs igång precis på ett tick så kanske du har andra tasks med samma prioritet som köats innan den notification-väntande. Då är det preemptionmekanismen som släpper loss ditt task, inte notification. Eller så missar du att göra "yield" i interruptrutinen.
Användarvisningsbild
Andax
Inlägg: 4373
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: STM32+FreeRTOS

Inlägg av Andax »

Du har nog rätt. Jag ska jobba vidare med det och göra mer tester.... Har bara kört STM32 utan rtos innan....
Användarvisningsbild
LHelge
Inlägg: 1772
Blev medlem: 2 september 2007, 18:25:31
Ort: Östergötland
Kontakt:

Re: STM32+FreeRTOS

Inlägg av LHelge »

Jag gillar ChibiOS för STM32, har dessutom ett riktigt kompetent HAL. Nu var det ett tag sedan jag använde STMCube, men då tyckte jag att det var skräp.

Största nackdelen med ChibiOS är väl licensmodellen, för egna projekt funkar det ju bra ändå.

.
Skriv svar