Podcast o Architektúra ARM Cortex-M3 a Základy Programovania
Architektúra ARM Cortex-M3 a Základy Programovania pre študentov
Podcast
Počítačová architektúra: Od Harvardu po Cortex-M3
Délka: 11 minut
Kapitoly
Čo pletie študentov?
Harvardská architektúra
Sila ARM Cortex-M3
Režimy a zásobníky
Prerušenia a výnimky
Od teórie k praxi
Kreslíme si kód
Jazyk počítača
Krôčik k človeku
Programovanie pre ľudí
Ako sa to prekladá?
Zhrnutie a prechod
Druhy softvéru
Polia a cykly
Praktický príklad
Zhrnutie a záver
Přepis
Marek: Vieš, čo je tá jedna vec v architektúre počítačov, ktorá zamotá hlavu skoro každému na skúške? Je to rozdiel medzi dvoma základnými architektúrami. A práve ten rozdiel rozhoduje o tom, či je procesor rýchly alebo... no, pomalší.
Tereza: Presne tak. A my vám ukážeme, ako si to zapamätať navždy a získať body navyše. Garantujem, že po tomto už nikdy nebudete váhať.
Marek: Počúvate Studyfi Podcast.
Marek: Dobre, Tereza, poďme na to. O akej architektúre sa bavíme?
Tereza: Hovoríme o Harvardskej architektúre, ktorú používa aj super populárny procesor ARM Cortex-M3. Kľúčová myšlienka je oddelenie. Predstav si kuchyňu, kde máš jednu poličku na recepty a druhú na suroviny.
Marek: A dva páry rúk — jedny berú recept, druhé suroviny.
Tereza: Presne! Harvardská architektúra má oddelenú pamäť a zbernice pre program, teda inštrukcie, a pre dáta. To znamená, že procesor môže naraz čítať ďalší príkaz a zároveň pracovať s dátami z predošlého. Je to oveľa rýchlejšie.
Marek: A toto teda využíva spomínaný ARM Cortex-M3. Čo to presne znamená, že je 32-bitový?
Tereza: Znamená to, že jeho „mozog“ pracuje s 32-bitovými číslami naraz. Všetky jeho hlavné súčasti – registre, aj aritmeticko-logická jednotka ALU – sú 32-bitové. A vďaka 32-bitovej adresnej zbernici dokáže priamo osloviť až 4 gigabajty pamäte. To je obrovský priestor.
Marek: Dobre, a v akých módoch vlastne procesor pracuje? Počul som o nejakom Thread a Handler móde.
Tereza: Áno, sú dva základné operačné módy. Thread mode je pre bežný program, ktorý práve vykonávaš. Keď ale príde nejaká urgentná požiadavka, napríklad od klávesnice, procesor sa prepne do Handler módu, aby ju obslúžil.
Marek: A čo tie zásobníky? MSP a PSP... To znie ako názvy vesmírnych lodí.
Tereza: Skoro. Sú to dva ukazovatele na zásobníky. Main Stack Pointer (MSP) sa používa v privilegovanom režime, kde má program plnú moc. Process Stack Pointer (PSP) zas v neprivilegovanom. Po resete začína procesor vždy v privilegovanom Thread móde a používa MSP.
Marek: Ešte rýchlo — aký je rozdiel medzi prerušením a výnimkou?
Tereza: Je to jednoduché. Výnimka vzniká priamo vnútri procesora – napríklad chyba pri výpočte. Prerušenie je externá požiadavka od periférie, napríklad od časovača alebo USB portu. Procesor musí prerušiť prácu, vybaviť požiadavku a vrátiť sa späť.
Marek: Super, toto bolo jasné a priamočiare. Mám pocit, že architektúre počítačov konečne rozumiem.
Marek: Dobre, takže tie podmienené príkazy if, else if a else dávajú zmysel. Ale poďme si to ukázať na nejakom reálnom, aj keď jednoduchom príklade.
Tereza: Jasné, to je najlepší spôsob. Predstavme si, že chceme napísať program, ktorý od používateľa načíta jedno číslo a povie mu, či je kladné, záporné, alebo či je to nula.
Marek: To znie ako dokonalý test pre naše nové vedomosti o podmienkach. Ako by sme postupovali?
Tereza: Je to celkom priamočiare. Najprv program načíta číslo. Potom príde prvá podmienka: 'if je číslo väčšie ako nula'. Ak áno, program vypíše, že je kladné.
Marek: A ak nie je? Potom použijeme 'else if'?
Tereza: Presne tak. Druhá podmienka bude 'else if je číslo menšie ako nula'. Ak táto platí, program vypíše, že je záporné.
Marek: A zostala nám už len jedna možnosť. Takže na konci bude 'else' a ten sa vykoná, ak číslo nie je ani kladné, ani záporné.
Tereza: Si na správnej stope! V tom prípade program vypíše, že číslo je nula. Jednoduché, však?
Marek: Keď to takto povieš, tak áno. Ale keď si predstavím zložitejší program, asi by som sa v tých podmienkach stratil. Existuje nejaký spôsob, ako si tú logiku vizualizovať?
Tereza: Určite. Na to slúžia vývojové diagramy. Je to vlastne grafické znázornenie toho, ako program postupuje. Kreslíš si také malé krabičky a šípky.
Marek: Ako mapa programu?
Tereza: Presne tak. Štart a koniec sú ovály, bežné príkazy sú obdĺžniky, a teraz to dôležité... každé rozhodnutie, každá naša 'if' podmienka, sa znázorňuje kosoštvorcom.
Marek: Aha! Takže z kosoštvorca idú dve šípky – jedna pre 'áno', ak podmienka platí, a druhá pre 'nie', ak neplatí.
Tereza: Vidíš, už to máš. Vývojový diagram graficky znázorňuje logiku programu a každé rozhodnutie v ňom zodpovedá podmienke if v samotnom kóde. Pomáha to udržať si prehľad.
Marek: Super, to si určite vyskúšam. Ale vŕta mi v hlave jedna vec. My tu píšeme príkazy ako 'if' alebo 'print', čo sú v podstate anglické slová. Ale ako tomu počítač rozumie? On predsa nevie po anglicky.
Tereza: To je skvelá otázka, Marek. A odpoveď je, že nerozumie. To, čo my píšeme, je takzvaný vyšší programovací jazyk. Ale procesor v počítači rozumie len jedinému jazyku – a to je strojový kód.
Marek: Strojový kód? To znie... technicky.
Tereza: Aj je. Je to najnižšia možná úroveň. Skladá sa len z núl a jednotiek. Každá kombinácia núl a jednotiek je presná inštrukcia pre procesor, napríklad 'sčítaj tieto dve čísla'. Pre človeka je to prakticky nečitateľné.
Marek: Nuly a jednotky... to si neviem ani predstaviť, že by som v tom mal niečo napísať. Musí existovať nejaký medzistupeň, nie?
Tereza: Samozrejme. O jednu úroveň vyššie je jazyk symbolických inštrukcií, alebo skrátene JSI, či Assembly. Namiesto hromady núl a jednotiek používa krátke, zapamätateľné skratky. Napríklad 'MOV' pre presun dát alebo 'ADD' pre sčítanie.
Marek: Dobre, 'ADD' je určite lepšie ako '01001000'.
Tereza: To rozhodne. Ale stále je to veľmi nízkoúrovňové. Každý príkaz v Assembly zodpovedá presne jednej inštrukcii v strojovom kóde. A program, ktorý prekladá Assembly do strojového kódu, sa volá assembler.
Marek: Fajn, takže máme strojový kód pre procesor a Assembly ako malú pomôcku pre ľudí. Ale to stále neznie ako niečo, v čom sa bežne tvoria aplikácie alebo hry.
Tereza: A máš pravdu, netvoria. Na to máme práve vyššie programovacie jazyky, ako sú Python, Java alebo C++. Tie sú najbližšie k ľudskej reči. Sú navrhnuté tak, aby boli pre nás čitateľné a zrozumiteľné.
Marek: Takže jeden príkaz v Pythone, napríklad 'sucet = 1 + 2', sa v skutočnosti preloží na mnoho inštrukcií v strojovom kóde?
Tereza: Presne tak. Tieto jazyky nám dávajú obrovskú abstrakciu. Nemusíme rozmýšľať nad tým, ako presne funguje procesor. Môžeme sa sústrediť na logiku toho, čo chceme dosiahnuť. A hlavne, sú prenositeľné.
Marek: Prenositeľné? Akože ich môžem zobrať na USB kľúči?
Tereza: Skoro. Znamená to, že ten istý kód napísaný v Pythone môžeš spustiť na Windowse, na Macu aj na Linuxe. Pri strojovom kóde alebo Assembly by si pre každý typ procesora musel písať kód zvlášť.
Marek: Rozumiem. A ako sa ten vyšší jazyk preloží do strojového kódu? Tiež na to existuje nejaký 'assembler'?
Tereza: Podobne, ale máme na to dva hlavné prístupy. Prvým je kompilátor. Ten si zoberie celý tvoj kód naraz, skontroluje ho a preloží ho do jedného spustiteľného súboru v strojovom kóde. Takto funguje napríklad jazyk C.
Marek: A ten druhý?
Tereza: Druhý je interpret. Ten neprekladá všetko naraz. Namiesto toho číta tvoj kód riadok po riadku a okamžite ho vykonáva. Je to ako tlmočník, ktorý prekladá reč naživo, vetu po vete. Takto funguje napríklad Python.
Marek: Takže kompilátor je ako prekladateľ knihy a interpret je ako živý tlmočník. Zaujímavé prirovnanie. Každý má asi svoje výhody, však?
Tereza: Presne. Kompilovaný kód je zvyčajne oveľa rýchlejší, pretože všetka prekladateľská práca sa urobila dopredu. Preto sa strojový kód a nízkoúrovňové jazyky stále používajú tam, kde je rýchlosť absolútne kritická, napríklad v ovládačoch zariadení.
Marek: A vyššie jazyky sú síce pomalšie, ale zase omnoho jednoduchšie na vývoj a prenositeľné. Takže je to vždy o kompromise.
Tereza: Vždy je to o výbere správneho nástroja pre danú úlohu. Takže, ak by sme to mali zhrnúť jednou vetou...
Marek: Počkaj, skúsim ja! Strojový kód je jazyk procesora tvorený nulami a jednotkami, JSI ho nahrádza čitateľnými skratkami a vyššie programovacie jazyky sú najbližšie k ľudskej reči. A všetky sa nakoniec musia preložiť do strojového kódu.
Tereza: Perfektné! Povedal si to lepšie, ako by som to zhrnula ja. Vidíš, už si v tom doma.
Marek: Skvelé. Cítim sa o niečo múdrejší. Takže teraz, keď rozumieme jazykom, ktorými hovoríme k počítaču, poďme sa pozrieť na to, ako v týchto jazykoch organizujeme väčšie množstvo dát. Čakajú nás totiž polia.
Marek: Dobre, poďme na poslednú veľkú tému, ktorá sa často objavuje na testoch – operačné systémy a zopár kľúčových konceptov z programovania.
Tereza: Presne tak. Je to taký rýchly prehľad, ktorý všetko pekne spojí. Takže, poďme na to.
Marek: Kde by sme mali začať? Čo je úplný základ?
Tereza: Základom je operačný systém. To je ten hlavný softvér, ktorý riadi celý počítač. Poznáme napríklad Windows, macOS alebo Linux.
Marek: A na tomto základe beží všetko ostatné, však?
Tereza: Áno, napríklad aplikačný softvér, čo sú programy na konkrétne účely – textové editory alebo hry. Alebo programovacie jazyky ako Python a Java, v ktorých sa tieto aplikácie tvoria.
Marek: Super. Poďme na tie polia. Čo je jednorozmerné pole?
Tereza: Predstav si ho ako nákupný zoznam. Je to len rad hodnôt rovnakého typu a prechádzame ho jedným cyklom. Kdežto viacrozmerné pole je skôr ako tabuľka... napríklad rozvrh hodín. Má riadky a stĺpce, a na prechádzanie potrebujeme dva vnorené cykly.
Marek: A aké cykly na to môžeme použiť?
Tereza: Najčastejšie FOR, keď vieme presný počet opakovaní. Potom máme WHILE, ktorý beží, kým platí nejaká podmienka. A nakoniec DO-WHILE.
Marek: Ten je trochu iný, že?
Tereza: Presne. Ten sa vykoná vždy aspoň raz, lebo podmienku kontroluje až na konci. Je to taký ten cyklus, čo najprv koná a až potom sa pýta.
Marek: To si zapamätám. Takže, aby sme to zhrnuli... Dnes sme si prešli naozaj veľa.
Tereza: Veru áno. Od základných hardvérových komponentov, cez siete až po softvér a základy programovania. Dúfame, že vám tento rýchly prehľad pomohol usporiadať si myšlienky.
Marek: Určite áno. Kľúčové je nebáť sa toho a pozerať sa na to ako na skladačku, kde všetko do seba zapadá. Držíme vám palce na skúškach!
Tereza: Presne tak, zvládnete to! Ďakujeme, že ste počúvali Studyfi Podcast a prajeme vám veľa úspechov. Dopočutia nabudúce!
Marek: Majte sa!