Budapest University of Technology and Economics, Faculty of Electrical Engineering and Informatics

    Belépés
    címtáras azonosítással

    vissza a tantárgylistához   nyomtatható verzió    

    Beágyazottszoftver-fejlesztés

    A tantárgy angol neve: Embedded Software Development

    Adatlap utolsó módosítása: 2024. január 12.

    Budapesti Műszaki és Gazdaságtudományi Egyetem
    Villamosmérnöki és Informatikai Kar
    Alapképzés (BSc), villamosmérnöki szak
    Tantárgykód Szemeszter Követelmények Kredit Tantárgyfélév
    VIMIAC17 5 2/2/0/v 5  
    3. A tantárgyfelelős személy és tanszék Dr. Orosz György,
    A tantárgy tanszéki weboldala http://www.mit.bme.hu/oktatas/targyak/VIMIAC17
    4. A tantárgy előadója Dr. Orosz György, docens, MIT
    Scherer Balázs, mestertanár, MIT
    Naszály Gábor, mestertanár, MIT
    5. A tantárgy az alábbi témakörök ismeretére épít

    C programozási nyelv

    Digitális technikai alapismeretek

    6. Előtanulmányi rend
    Kötelező:
    Szakirany("AVIN22-BEAGYSZOFTFEJL", _) VAGY
    Szakirany("AVIN22-IRRENDSZ", _) VAGY
    Szakirany("AVIN22-SZGALAPURENDSZ", _) VAGY
    Szakirany("AVINbeagy", _) VAGY
    Szakirany("AVINirrend", _) VAGY
    Szakirany("AVINszgepalrend", _) VAGY
    Szakirany("VIABV2022-EMBCS", _) VAGY
    Szakirany("VIABV-EMBCS", _)


    A fenti forma a Neptun sajátja, ezen technikai okokból nem változtattunk.

    A kötelező előtanulmányi rend az adott szak honlapján és képzési programjában található.

    Ajánlott:
    A programozás alapjai 1
    7. A tantárgy célkitűzése A tárgy elsődleges célja a hallgatók bevezetése a beágyazott szoftverek fejlesztési témakörébe.
    A tárgy keretén belül ismertetésre kerülnek a beágyazott fejlesztés C nyelvű alapjai, a
    keresztfordítás sajátosságai, a C kód fordításának lépései és feltételei beágyazott vezérlők esetén.
    A hallgatók megismerik a memóriába leképezett perifériák elérési módszereit és az erre vonatkozó
    szabványosítási törekvéseket, mint például a CMSIS-Core-t.
    Bemutatásra kerülnek a beágyazott szoftverekben alkalmazott hardware absztrakciós rétegek
    kezdve az alacsony szintű, mikrovezérlő szintű absztrakciókkal, firmware könyvtárakkal, folytatva az
    erre épülő magasabb board szintű absztrakciókkal, valamint az absztrakciós rétegek
    létrehozásához tartozó általános szabályokkal: kommentezési, elnevezési, nyelvi készletet
    korlátozó (MISRA-C) szabályok és rétegszervezési minták. Ismertetjük a perifériák lekérdezése,
    megszakítása és DMA (Direct Memory Access) alapú kezelési elveit és a LibC függvénykönyvtár
    portolását.
    A tárgy ismerteti a beágyazott szoftverekben általánosan alkalmazott üzemmódokat, ezeken belül
    hangsúlyozottan bemutatásra kerül a diagnosztikai és energiatakarékos üzemmód.
    A hallgatók megismerhetik a fejlesztés során sokszor alkalmazott debugolási folyamatok lépéseit
    és felépítését, valamint a modern vezérlők által nyújtott trace és debug lehetőségeket.
    A tárgy a szoftverütemezés témakörével zárul. Bemutatásra kerülnek az egyszerű ütemező
    architektúrák úgymint a Round-Robin és függvénysoralapú ütemezés, és részletesen foglalkozunk a beágyazott operációs rendszerekkel. A FreeRTOS-en keresztül ismertetésre kerülnek a
    párhuzamos programozás alapjai és problémái: szálak létrehozása, közös erőforrások használata,
    kölcsönös kizárás, szálszinkronizáció, egyéb OS szolgáltatások. Példákkal illusztráljuk a beágyazott
    OS-ek használatának tipikus nehézségeit: stack problémák, időzítési, ütemezési problémák.
    8. A tantárgy részletes tematikája

    Az előadások részletes tematikája

    1. hét: A beágyazottszoftver-fejlesztés C nyelvű alapjai: A keresztfordítás lépései és sajátosságai,
    C kód fordítása beágyazott vezérlőre. Kód elindulásának folyamata egy mikrovezérlőn, annak
    bemutatása, hogy mi történik a main() függvény meghívása előtt.

    2. hét: Memóriába leképezett regiszterek, perifériák kezelése: Hagyományos, egyedi mutatókra
    épülő megoldások. Általánosított, a perifériákat blokk szintjén kezelő struktúraalapú megoldások,
    és ezek szabványosítása: a CMSIS-Core bemutatása. A CMSIS core szabvány által megkövetelt
    szerkezet és kódolási minta bemutatása.

    3. hét: Hardware absztrakciós rétegek: A mikrovezérlő szintű absztrakció: a mikrovezérlő szintű
    absztrakció feladatának és szükségességének bemutatása. A modern firmware library-k
    felépítésének bemutatása. Törekvés a szabványosításra, CMSIS-Driver API, kódolási, elnevezési és
    kommentezési szabályok bevezetése. A standard C környezet és a beágyazott környezet közötti
    kapcsolódási pontok bemutatása.

    4. hét: Perifériák interrupt-alapú kezelése: A megszakításkezelés során lejátszódó folyamatok
    ismertetése, a vektoros megszakításkezelés szoftveres alapjainak bemutatása. Tipikusan
    megszakításalapú perifériakezelést igénylő esettanulmányok mutatása.

    5. hét: Perifériák DMA (Direct Memory Access) alapú kezelése: A DMA átvitel elméleti alapjainak
    bemutatása. A tipikus DMA átvitelnél megadandó paraméterek ismertetése. A hatékony DMA
    kezelés és a rendszerarchitektúra felépítésének összefüggései. Alkalmazási minták mutatása DMA
    alapú perifériakezelésre.

    6. hét: Hardware absztrakciós rétegek (board szintű absztrakció): A board szintű absztrakció
    szükségessége és lehetséges felületei. Annak bemutatása, hogy miért szükséges egy magasabb
    szintű absztrakció létrehozása a mikrovezérlő absztrakció fölé. Minták, szabványosítási törekvések
    mutatása a board szintű absztrakcióra.

    7. hét: A beágyazott szoftverek tipikus üzemmódjai: A beágyazott szoftverben megvalósítandó
    tipikus üzemmódok és jellemzőik ismertetése: energiatakarékos módok, hibamódok: fail stop, fail
    reduced, kalibrációs és diagnosztikai üzemmódok. A modern mikrovezérlők jellemző
    energiatakarékos módjainak bemutatása, alkalmazásuk szoftveres és programszervezési kérdései.

    8. hét: A beágyazott szoftverek tipikus üzemmódjai: A kalibrációs és diagnosztikai üzemmódok
    szerepének bemutatása: tesztelési támogatás, működés közbeni monitorozás, konfigurálás,
    hibaesemények tárolása stb. A távoli programfrissítési lehetőségek (bootloader) ismertetése. Egy
    ipari diagnosztikai protokoll tulajdonságainak rövid bemutatása: XCP (Universal Measurement and
    Calibration Protocol).

    9. hét: A beágyazott szoftver debuggolása, tesztelése: Modern mikrovezérlők által nyújtott debug
    lehetőségek, a debug kapcsolat bemutatása a mikrovezérlőtől az IDE-ig: debug hardware (CMSIS-
    DAP mint általánosítási kísérlet), GDB szerver, GDB RSP, GDB parancssor. Modern vezérlők trace
    képességei és az azokból nyerhető információk: DWT, ITM képességek és ezek megjelenése a
    fejlesztőkörnyezetben.

    10. hét: Nem preemptív szoftverarchitektúrák bemutatása, bevezetés az RTOS-ekbe: Round-Robin, megszakításokkal kiegészített Round-Robin, függvénysor alapú nem preemptív ütemezők.
    A beágyazott operációs rendszerek jellemzőinek bemutatása a FreeRTOS-en keresztül: felépítés,
    működés, ütemezési jellemzők, az egyes szálak üzemmódjai.

    11. hét: A párhuzamos programozás alapjai (közös erőforrások használata és kölcsönös kizárás): A
    közös erőforrások használatából adódó problémák bemutatása. A közös erőforrások használatára
    alkalmazott elméleti megoldások, például mutex-ek működési alapjainak ismertetése.

    12. hét: A párhuzamos programozás alapjai (szinkronizáció és kommunikáció a szálak között): A
    szálak közötti kommunikáció eszközeinek és azok elméleti működésének bemutatása. A
    szemaforok és queue-k szerepe a szálak közötti és a szálak és megszakítások közötti
    kommunikációban.

    13. hét: A párhuzamos programozás alapjai (jellemző problémák): A közös memóriaterületen
    osztozó szálak jellemző problémái és azok elméleti kezelése: stack problémák és kezelési
    módjaik. Ütemezési és ütemezhetőségi problémák. A szálak jellemző időzítési tulajdonságainak
    bemutatása: végrehajtási idő és válaszidő. A végrehajtási idő mérésének módszerei, a válaszidő
    számításának feltételei és módszerei.

    14. hét: szünetek vagy konzultáció

     

    A gyakorlatok és laborok részletes tematikája

    1.hét: Ismerkedés a fejlesztői környezettel és fejlesztőkártyával: A kiválasztott környezetben egy
    project létrehozása. A kód fordulás lépéseinek és a program indítási folyamatának megértése.

    2.hét: Egyszerű periféria kezelése, GPIO láb kezelése: Egyszerű perifériakezelés hagyományos
    memóriamutatók és a CMSIS-Core alapú struktúrák használatával.

    3.hét: Perifériakezelés firmware library alapon: Firmware library függvények használata az
    egyszerű perifériák kezelésére. GPIO és UART kezelési példák. A LibC portolása az UART kimeneten
    keresztüli printf használathoz.

    4.hét: Perifériakezelés IT használatával: Interrupt rutin megvalósítása egy kiválasztott periféria
    kezelésére. Gyakorlat szerzése a megszakításkezelés területén.

    5.hét: Perifériakezelés DMA használatával: A DMA vezérlő felprogramozása egy memória -
    periféria átvitel megvalósítására. Az interrupt-os és DMA alapú működés összehasonlítása.

    6.hét: Board szintű absztrakció létrehozása: Egy külső szenzor kezelése (például egy I2C buszos
    hőmérő). API készítése a szenzorhoz, a megfelelő kezelési mód: interruptos, vagy DMA mód
    kiválasztása.

    7.hét: Energiatakarékos üzemmódok kipróbálása: Üzemmódfüggő fogyasztás vizsgálata, melyik
    részei a processzornak maradnak ébren bizonyos módokban. Egyszerű program készítése timerre,
    vagy nyomógombra történő működésre.

    8.hét: Diagnosztikai üzemmód: Egy meglévő protokoll (XCP) portolása, egy egyszerű CLI (Command Line Interface) létrehozása.

    9.hét: Debuggolási gyakorlat: Hagyományos debug lehetőségek, annak végigkövetése, hogy
    hogyan jut el a debug parancs a fejlesztő környezetből a kártyára. Watch, Live watch alkalmazása,
    trace lehetőségek: IT követés, Trace konzol beépülése a fejlesztő környezetekbe.

    10.hét: Beágyazott OS: FreeRTOS elindítása a demókártyán. Egyszerű, 1-2 szálat megvalósító
    demó program létrehozása.

    11.hét: Kölcsönös kizárás: Közös változó/erőforrás használat problémájának demonstrálása. A
    közös erőforrás-használat során alkalmazott védelmi eljárások bemutatása, példák Mutex-ek
    alkalmazására.

    12.hét: Szálak közötti szinkronizáció és kommunikáció: Szál - szál közötti szinkronizáció és szál -
    megszakítás közötti szinkronizáció eszközei. Jelzések és üzenetek továbbítása szemaforok és
    queue-k használatával.

    13.hét: A beágyazott OS-ek használatánál előforduló lehetséges problémák demonstrálása és
    kezelése:
    Stack elfogyás demonstrálása és stack védelem. Az időzítés és ütemezés nyomkövetése a
    kernel műszerezésével.

    14. hét: szünetek, vagy konzultáció

    9. A tantárgy oktatásának módja (előadás, gyakorlat, laboratórium) Előadás, ezt kiegészítve az egyes előadás témakörökhöz gyakorlati/demonstráció alapú oktatással.
    10. Követelmények

    Szorgalmi időszakban: a félév során egy házi feladat elkészítése és ZH.

    Vizsgaidőszakban: írásbeli vizsga.

    11. Pótlási lehetőségek

    A ZH egyszer pótolható a szorgalmi időszakban.

    Otthoni feladat a pótlások hetének végéig különeljárási díj befizetése mellett pótolható. Otthoni
    feladat vizsgaidőszakban nem pótolható, zárthelyivel nem helyettesíthető.

    12. Konzultációs lehetőségek Igény szerint, előzetesen egyeztetett konzultációs időpontokban.
    13. Jegyzet, tankönyv, felhasználható irodalom Elektronikus segédanyag a tárgy honlapján.
    14. A tantárgy elvégzéséhez átlagosan szükséges tanulmányi munka
    Kontakt óra56
    Félévközi készülés órákra10
    Felkészülés zárthelyire8
    Házi feladat elkészítése36
    Kijelölt írásos tananyag elsajátítása8
    Vizsgafelkészülés32
    Összesen150
    15. A tantárgy tematikáját kidolgozta Dr. Orosz György, docens, MIT
    Scherer Balázs, mestertanár, MIT
    Naszály Gábor, mestertanár, MIT
    Dr. Kovácsházy Tamás, docens, MIT
    IMSc tematika és módszer A félév során az iMSC hallgatók számára eltérő nehézségű házi feladat kiadása iMSC pontokért.
    IMSc pontozás A házi feladatra kapható 25 IMSc pont.
    Idegen nyelvi részteljesítés követelményei 2 kreditpontért a ZH és vizsga sikeres teljesítése.