Používáme FreeRTOS
na mikrokontroleru STM32
Ing. Vojtěch Skřivánek
*Create the thread(s) */ /* definition and creation of defaultTask */
osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL); /* USER CODE BEGIN RTOS_THREADS */
xEventGroupCreate();
xTaskCreate(TaskNizkaPriorita1, "Task Nizka 1", 64, NULL, 1, NULL);
xTaskCreate(TaskNizkaPriorita2, "Task Nizka 2", 64, NULL, 1, NULL);
xTaskCreate(TaskVysokaPriorita1, "Task Vysoka 1", 64, NULL, 2, NULL);
BaseType_t status = if(status != pdPASS) { HAL_UART_Transmit(&huart2, "Plna pamet", 10, 100); while(1);
za podpory firmy SIE
Používáme FreeRTOS
na mikrokontroleru STM32
Ing. Vojtěch Skřivánek
Vydání první 2023
© Ing. Vojtěch Skřivánek
© Mgr. Tomáš Zahradníček - TZ-one
ISBN: 978-80-7539-153-7 (PDF verze)
Poděkování
Děkujifirmě
SIEMENS
zapodporupřipsanítétoknihy.
4.2.1Příklad1–tvorbavláknaasdíleníčasu
4.3.2Příklad4–periodicitaběhu
4.4.1Příklad6–plánovacíalgoritmus
4.5.1Příklad7–odstavenívlákna
4.6.1Příklad8–mazánívlákna
5.1.1Příklad9–periodickýajednorázovýčasovač
6.2.1Příklad11–odstaveníplánovacíhoalgoritmu
7.2.1Příklad14–dvapříjemcisvyššíprioritou
7.2.2Příklad15–dvavysílačesvyššíprioritou
12.0.1Příklad23–FreeRTOSvúspornémrežimu
Kapitola1
Úvod
Tatoknihapojednáváooperačnímsystému FreeRTOS,kterýjevsoučasnédoběvelmirozšířený.Jeto předevšímdíkyjehovolnélicenciadostupnostiprovelkémnožstvímikrokontrolerů.Vknizejepopsáno,jak tentooperačnísystémfunguje,ajakémožnostiafunkcenabízívývojářikpoužití.
Knihasenesnažípokrýtvšechnyteoretickéaspektyoperačníhosystému.Soustředísepředevšímnapraktickévyužitínejčastějipoužívanýchnástrojů.Protosevknizenepopisujíanirozšířené,nepříliščastovyužívané funkcesystému.Prostorjeradějipřenechánpraktickýmpříkladům,vnichžjsoučastoukázánaskrytánebezpečí.Tamohoupřišpatnémpoužitínástrojůoperačníhosystémuneblazeovlivnitběhprogramu.
Příkladyvtétoknizevyužívajíjakoplatformuvývojovoudesku NUCLEO-L073RZ.(Použitavknižnísérii "ProgramujemeSTM32".)Nicméněpříkladyjsounahardwaruzávislépouzeminimálně–problikáníLED, použitísériovélinkynakomunikacisPC.Protojelzesnadnopřevéstinajinékontroleryčisystémy,proněžje FreeRTOS uzpůsobeno.Proseznámenísoperačnímsystémemajehonástrojinavícčastostačípříkladpouze pročíst.
Knihavycházípředevšímzedvoudokumentůuvedenýchvzávěruknihy.Teoretickáčástjevtétoknize značnězkrácena,aleneníopomenutonicdůležitého.Naopakdíkyvětšímudůrazunaprakticképříkladyjeobčas názorněvidětproblém,kterýpřipouhémteoretickémpopisufunkcenástrojůnenízřejmý.Aprávěpomocí vysvětleníneočekávanéhochováníukázkovéhoprogramusičtenářuvědomí,jakoperačnísystémfungujeanač sipřijehopoužívánídátpozor.
Předpokládáse,žečtenářjižmázkušenostisprogramovánímmikrokontrolerů STM32 ,ví,jaksepracuje sknihovnímifunkcemi HAL aumípoužívat STM32CubeIDE
1.1Strukturaknihy
Knihasevesvýchjedenáctikapitoláchzabývárůznýmitématyoperačníhosystému FreeRTOS.Vprvní, obecnékapitolejeteoretickýúvodooperačnímsystémuajehostruktuře.
Každáznásledujícíchosmikapitolsezabývájednímznástrojů(čiskupinoupodobnýchnástrojů),které můžeprogramátorvyužít.Každátatokapitolamákrátkýteoretickýúvodkdanémunástroji.
Cojevšakdůležitější,každákapitolačipodkapitolaobsahujepříklady.Příkladysevesvékomplexnosti lišívzávislostinanáročnostičidůležitostitématu.Častosevpříkladechexperimentuje,čisejejichprogram mění,abybylvidětrozdílvjehochování.Důvodemzměnječastointuitivnípoužitífunkcíoperačníhosystému, kterévšakvedekneočekávanémuběhuprogramu.
Téměřvkaždémpříkladusenacházíjedenčivícegrafůnázornězobrazujícíchběhprogramu,kteréjsou velmidůležitékpochopenízpůsobufunkceoperačníhosystému.Všechnyknihovnífunkceoperačníhosystému použitévpříkladechjsouvtextudetailněpopsány.
Každákapitolapředpokládáznalostizkapitolpředchozích,atopředevšímupříkladů.Nenítedydoporučenokapitolypřeskakovat,zvláštěpakvpřípadě,kdyčtenářnemápředchozízkušenostisžádnýmikontrolery aoperačnímisystémy.
1.2Fontytextu
Anglickézkratky,názvyfunkcíaparametrůjsouvtextupsánytučnoukurzívou-např. xTaskCreate.Ač bybylokonzistentnějšípoužívatvknizebuďpouzečeské,neboanglickénázvosloví,existuje-ličeskýekvivalent (např. queue =fronta),jepoužit,jelikožlépezapadnedověty,kterájepaksrozumitelnější.
Vobrázcíchčigrafechjsouněkteréčástičíselněoznačeny.Natatooznačeníjevtextuodkazovánotučně psanýmčíslemvzávorce–např. (1)
Názvyvlákenafunkcíjsoupsánykurzívouanázvyvláken(Task =vlákno)začínajívelkýmpísmenem–např. Vlakno1, uartOdesli.
Kapitola2
Vývojovénástroje
Kprogramovánímikrokontrolerůjsouzapotřebítřizákladnínástroje.
Prvnímznichjesamozřejměsamotnýmikrokontroler.Nejsnazšímzpůsobem,jakmítkdispozicifunkční mikrokontrolerpřipravenýkprogramováníapoužíváníjehoperiferií,jeopatřitsivývojovoudesku.Firma STMicroelectronicsnabízíširokouškálucenověpříznivýchvývojovýchdesek.Mezinejznámějšípatřířadydesek Nucleo a Discovery.Tyseodsebelišítím,žezatímco Nucleo obsahujepřevážněpouzemikrokontrolera konektory, Discovery dostčastoskýtátakérozličnésenzory,tlačítka,LED,displejeajinéprvky,připojené přímokekontroleruapřipravenékokamžitémupoužití.
Druhýmpotřebnýmnástrojemjeprogramátormikrokontroleru,kterýdokáženahrátbinárníkódzPC dopamětiprogramučipu.Tentoprogramátorjemožnékoupitsamostatně,alevýhodouvšechvývojových desekfirmySTMicroelectronicsje,žekaždáznichmávsoběprogramátora debugger (používanýkladění programu)jižintegrovaný.
Zbýváposlednínástroj,ačkolivjdevlastněodva,kteréjevšakmožnoopětzískatvjednombalíčku.Prvnímjevývojovéprostředí,vekterémjemožnésnadnopsátkódaspravovatprojektprogramu.Druhýmje překladačzdrojovéhokódu,psanéhovjazyceC,dostrojovéhobinárníhokódu,kterémurozumídanýkontroler.FirmaSTMicroelectronicsnabízízdarmasvévývojovéprostředí STM32CubeIDE,vekterémjemožné napsatzdrojovýkód,přeložitjejdostrojovéhoapomocíprogramátorujejnahrátdoprogramovépaměti mikrokontroleru.
2.1Vývojovádeska
Vývojovádeska,kterájepoužitanavšechnypříkladyvtétoknize,jezřadydesek Nucleo snázvem NUCLEO-L073RZ .
VývojovádeskaNUCLEO-L073RZ[1]
Deskaobsahuje,mimomikrokontroleru STM32L073RZ ,takéjižzmíněnýprogramátoradebuggersloužícíkladěníprogramu (1).Programátorsenacházívhorníčástidesky,kteroujemožnéodspodníodlomit.K programováníkontrolerůmimovývojovoudeskusloužíkonektor CN4 vlevéčásti (2).Horníčásttakéobsahujepřevodníkkomunikacez USB na UART ,jehožvývody CN3 jsouvpravoodprogramovacíhokonektoru (3).Anijedenztěchtokonektorůnenítřebapoužívat,jelikožprogramátoripřevodníkjsouskontrolerem spojenymůstkymezihorníadolníčástídesky.Převodníkjespojensperiferiíkontroleru USART2 ,kterou budemepoužívatvevšechpříkladechkomunikujícíchspočítačem.
KroměLED,kterésignalizujífunkciprogramátoruasprávnénapájení,jenadesceumístěnatakéjedna uživatelskáLED LD2 (6),kteroulzepinemmikrokontroleruovládat.TutoLEDbudemepoužívatvevšech příkladech,kdesebudepracovatsnastavenímvýstupníhodnotysignálu.LEDjepřipojenanapin PA5 .
Propříkladyvtétoknizenenípotřebaznátdalšídetailyotétovývojovédesceaninaníniczapojovat. Budestačitjipouzepřipojit.
2.2Vývojovéprostředí
Jakjižbylozmíněno,výrobcečipuposkytujezdarmavývojovéprostředí STM32CubeIDE,vekterém jsouvytvořenyvšechnypříkladytétoknihy.
Totoprostředívsoběobsahujekonfigurátorperiferiíčipu,programováníasprávuprojektu,nahráníprogramudomikrokontroleruamožnostjeholadění(debuggování).
Sinstalacívývojovéhoprostředíseautomatickynainstalujeiovladačprogramátoru,kterýjeumístěnýna Nucleodesce,apřekladačzezdrojovéhokódunastrojový.
STM32CubeIDE jemožnéporegistracinawebovýchstránkáchfirmySTMicroelectronicsstáhnout zcelazdarma.Nejsnazšímzpůsobemnalezeníodkazukestaženíjezadatdointernetovéhovyhledávačeheslo "STM32CubeIDE"apravděpodobněhnedprvníodkazbudemířitnasprávnoustránku,kdenajdetetakénávod nainstalaciamanuálkpoužití.
Snadnenínutnépopisovatinstalacivývojovéhoprostředí,kterájeplněautomatickáanainstalujeivšechny nutnéovladače.
2.3Shrnutí
Popřečtenítétokapitolybymělmítčtenářkúspěšnémunaprogramovánípříkladůuvedenýchvtétoknize připravenynásledujícínejnutnějšívěci:
• vývojovoudesku NUCLEO-L07RZ,
• USBkabel kpřipojenídeskyvpočítačia
• počítačsnainstalovanýmvývojovýmprostředím STM32CubeIDE.
Stoutonezbytnouvýbavou,jemožnésesmělepustitdočtenínásledujícíchkapitol,kteréodhalujípoužívání operačníhosystému FreeRTOS
Kapitola3
FreeRTOSobecně
FreeRTOS (FreeRealTimeOperatingSystem)jeoperačnísystémpracujícívreálnémčaseurčený předevšímproprogramyběžícínamikrokontrolerech.Operačnísystémjeupravenpromnohopřekladačůa několikdesítekarchitekturmikrokontrolerů.
Operačnísystémfungujejakoskupinaknihoven,jejichžfunkceumožňujímultitasking.Multitaskingje prováděnpomocívláken,jejichžprogrammůžeprobíhatparalelně.Operačnísystémdálenabízíširokouškálu nástrojůnasynchronizacivláken,přenosdatmezinimiadalšíužitečnémožnosti.
FreeRTOS máotevřenoulicenci,jetedyzcelazdarmaajemožnéjejvyužítprokomerčníaplikace.
Operačnísystémjemožnéstáhnoutzwebovéstránky: https://www.freertos.org/index.html
3.1Strukturasouborů
FreeRTOS fungujejakoskupinaknihovenpsanýchvjazyceC.Pokudchcemevyužívatoperačnísystém, musímesevnašemprogramuodkázatnatytoknihovny,respektivejejichhlavičkovésoubory.
Postáhnutíarchivusoperačnímsystémemzodkazuuvedenémvýševněmnaleznemetentoobsah.
Vesložce Demo senacházívelkémnožstvíukázkovýchfunkčníchprojektů.Jemožnésejiminechatinspirovatpřitvorběvlastníhoprojektu.Alejakuvidíme,vývojovéprostředípronásprojektjižpřipraví.
Vesložce FreeRTOS/Source naleznemenásledujícísložkyasoubory: