DioneOS
Utvecklare | EleSoftRom inbyggda system |
---|---|
Skrivet i | C |
Arbetstillstånd | Avvecklad |
Källmodell | Proprietär |
Initial release | 2 februari 2011 |
Slutlig utgåva | ARM Cortex-M3 / 29 mars 2013 |
Marknadsföringsmål | Inbyggda system |
Tillgänglig i | engelsk |
Plattformar | TI MSP430 , ARM Cortex-M3 |
Typ av kärna | Realtid |
Officiell hemsida |
DioneOS (uttalas /djoneos/) är ett multitasking förebyggande , realtidsoperativsystem (RTOS). Systemet är designat för mikrokontroller , ursprungligen släppt den 2 februari 2011 för Texas Instruments TI MSP430x och sedan den 29 mars 2013 för ARM Cortex-M3 . Målmikrokontrollerplattformar har begränsade resurser, dvs systemklockfrekvens på tiotals MHz och minnesmängder på tiotals till några hundra kilobyte (KB). RTOS är anpassad till sådana förhållanden genom att ge en kompakt och effektiv bild. Effektivitetstermen betyder här att minimera ytterligare av centralprocessor (CPU) orsakad av systemanvändning. Enligt denna definition är systemet mer effektivt när det förbrukar mindre CPU-tid för att exekvera sina interna delar, t.ex. hantera trådar .
DioneOS-systemet är avsett för autonoma enheter där användargränssnittet har begränsade funktioner. Kärnfunktionerna som tillhandahålls av systemet är en miljö för att bygga multitasking firmware med hjälp av vanliga, välkända koncept (t.ex. semaforer , timers, etc.). På grund av applikationens måldomän använder systemet ett kommandoradsgränssnitt och har inget grafiskt användargränssnitt .
Minnesmodell
Texas Instruments tillverkar ett brett utbud av mikrokontroller som använder MSP430-kärnan. Beroende på version innehåller processorn olika mängd flashminne och RAM -minne , t.ex. har MSP430f2201 1KB/128B motsvarande, men MSP430f5438 har 256KB/16KB. När storleken på minnet överstiger gränsen för 64 KB, som händer när minnet inte får plats i ett intervall på 0–64 KB, 16-bitars adressering otillräcklig. På grund av denna begränsning är chips med större minne utrustade med utökad kärna (MSP430x). Denna version av processorn har bredare register (20-bitars) och nya instruktioner för att bearbeta dem.
Vid kompileringen väljer programmeraren typen av minnesmodell ( nära eller fjärran ) som används för FLASH-
och RAM
-minnen. Det här valet bestämmer tillgängligt minnesintervall, så när FLASH
över 64 KB-gränsen är programmerad måste den bortre modellen användas.
DioneOS stöder den bortre modellen för kodmoduler, så stor firmware som använder utökad FLASH
kan utvecklas och köras under systemets kontroll. Systemet använder näraminnesmodellen för datasegment.
Trådhantering
Den fasta programvaran som startas under DioneOS-systemet består av trådar som körs pseudo- parallellt . Varje tråd har sin egen unika prioritet som används för att beställa trådarna, från viktigast till minst. Trådprioritetsvärdet definierar en prioritet för att köra över andra.
I DioneOS-systemet kan tråden vara i ett av följande tillstånd:
- Körs - tråden körs för närvarande av processor,
- Klar - tråden är redo att köras,
- Väntar - tråden är blockerad och väntar på något synkroniseringsobjekt.
Eftersom det bara finns en kärna i processorn kan endast en tråd vara i körläge. Det här är den tråd som har högst prioritet från alla trådar som inte är i vänteläge. Ändring av trådens tillstånd kan orsakas av:
- triggar ett föremål som håller tråden,
- misslyckat förvärva objektet som redan är låst (t.ex. en mutex som ägs av någon annan),
- förflutna timeout,
- ange byte av en annan tråd, vilket kan leda till förköp.
Systemet hanterar upp till 16 trådar, inklusive inaktiv en med lägst prioritet. Den inaktiva tråden ska alltid vara redo att köras och aldrig bytas till vänteläge, så det är inte tillåtet att anropa några funktioner som skulle blockera inifrån denna tråd. Tomgångsgängan kan användas för att bestämma total systembelastning.
Funktioner i systemet
DioneOS-systemet ger:
- objekt för synkronisering: mutexer och räknesemaforer , används för trådsynkronisering, signalering från ISR till en tråd och bevakning av delade resurser,
- metoder för tidshantering: timers, trådsömn, timeouts ,
- kommunikationsobjekt implementerade av händelser och köer tillgängliga som cirkulära buffertar ,
- minneshantering av minnespool som tilldelar minne endast i block med fast storlek men är fri från fragmenteringsproblem som kan uppstå när heap används. Regelbunden tilldelning av malloc/free on heap är också tillgänglig, den tillhandahålls av standard C -bibliotek .
- testa stödobjekt: signaleringshändelser på chippinnar, kritiska undantag, objektmarkering som hjälper är att upptäcka fel som användning av borttagna objekt eller dubbel minnesdeallokering, etc.
Kontextväxling
Som det stod i kapitlet 'Trådhantering' består den fasta programvaran av pseudo-parallella trådar. Varje tråd har sin egen kontext, som innehåller kärnregister för processorn, senaste exekveringsadress och privat stack. Under växlingen mellan trådar sparar systemet sammanhanget för stoppad tråd och återställer sammanhanget för den som körs. Denna tillståndsbesparing gör det möjligt att bryta trådexekveringen och fortsätta, även om en annan tråd har körts mellan dem. Observera att preemption följt av kontextväxling kan ske när som helst, även om ingen systemfunktion anropas i tråden. Även om det kan hända på en oväntad plats i den körda koden, förvrängs inte trådarbetet på grund av att systemet och kontexten sparas. Ur trådsynpunkt kan bytet göras i bakgrunden.
Kontextväxeln är kritisk operation i systemet och tidpunkten för dess exekvering avgör hur effektivt systemet är. På grund av det optimerades kontextväxeln i DioneOS-systemet för kort tid. De viktigaste delarna skrevs i assembler , så bytet kan göras på 12–17 μs (för f osc =25 MHz).
I DioneOS-systemet kan kontextväxlingen initieras från avbrottshanteraren (avbrottstjänstrutin). Den här egenskapen är användbar för att flytta en händelsehantering till tråden och implementeras vanligtvis i tvåskiktsarkitektur:
- avbrottshanteraren - anropas efter att hårdvaruavbrott har inträffat. I den här delen är avbrott inaktiverade, så exekveringen kan inte fortsätta under lång tid, annars äventyras systemets lyhördhet. I det här lagret ska endast jobb som kräver snabb respons för avbrott bearbetas, alla andra ska skickas till högre lager,
- högre lager - bearbetning i separerad tråd utan blockerande avbrott; denna tråd kan föregripas. Restriktioner är inte så snäva här som i avbrottshanteraren. Kodexekveringen blockerar inte systemet.
- Kontextväxeln mätt från signaleringspunkt i ISR till annan trådåterställning tar 10us (för f osc =25 MHz) i DioneOS-systemet.
Konfiguration
DioneOS har flera konfigurationsalternativ som påverkar funktioner som infogas i den kompilerade bilden av systemet. Många av dem är källkodsväxlar som finns samlade i konfigurationsfilen och kan ändras av en utvecklare av firmware . På detta sätt är det möjligt att kontrollera ytterligare testdelar. Om de är aktiverade är systemet byggt i en version som ger mer detektering av ovanliga förhållanden och körtidsinformation som hjälper till med felsökningsprocessen. När felen hittas och elimineras kan dessa extra funktioner inaktiveras för att ha full prestanda för systemet.
Exempel på ett fragment av konfigurationsfilen:
[...] #define CFG_CHECK_OVERFLOW /* overflow-testning i semaforer/mutexes */ #define CFG_CHECK_LOCK /* detektering av låsproblem orsakad av företrädesvillkor under schemaläggningslås */ #define CFG_LISTDEL_WITH_POISON /* markering av borttagna objekt på listan i os_list1_del() */ #define CFG_MEM_POOL_POISON_FILL 0xDAAB /* mönster för att markera avallokerade minnesobjekt */ #define CFG_LISTDEL_POISON 0xABBA /* mönster för att markera borttagna listobjekt */ #define CFG_CHECK_EMPTY_SEM_DESTROY_ /* förstöra i semi_CFG_DESTROY/* testa i semi_F_DESTROY/() PTY_MEM_POOL /* ledigt minnesfyllning med mönster */ [...]