# **NSWE001** Vestavěné systémy a systémy reálného času

<{Box(infobox)}>
|-----|-----|
| **Stránka předmětu:** | [Web](http://d3s.mff.cuni.cz/teaching/nswe001) |
| **Garant:** | [prof. RNDr. Tomáš Bureš, Ph.D.](https://d3s.mff.cuni.cz/people/tomasbures/) |
| **Vyučující:** | [prof. RNDr. Tomáš Bureš, Ph.D.](https://d3s.mff.cuni.cz/people/tomasbures/), Milad Ashqi Abdullah |
| **SIS:** | [Odkaz do SISu](https://is.cuni.cz/studium/predmety/index.php?do=predmet&kod=NSWE001) |
| **Diskuze:** | [Discord kanál](https://discord.com/channels/625428723302137876/943579892791005284) |
<{/Box}>

## Info
- Tomáš Bureš je pohoda týpek. Also narozdíl od fotek na webu má dlouhé vlasy a vypadá mega líp.
- Neoficiální prerekvizitou je umět programovat v Cčku, jinak jste nahraný.


## Studijní materiály
### Prezentace k předmětu
- Prezentace z přednášek jsou pro studenty k dispozici v pdf na Teamsech.

## Praktické k úložkám

### STM32 (úložky 1-4)
**Getting started:**
- Install STM32CubeMX, STM32CubeCLT, OpenOCD and set their paths inClion Embedded Development (`/opt/stm32cubemx/STM32CubeMX`, `/opt/stm32cubeclt`, `/usr/bin/openocd`)
- Install gcc toolchain (not just arm-none-eabi-gcc !): `pacman -S arm-none-eabi-binutils arm-none-eabi-gcc arm-none-eabi-gdb arm-none-eabi-newlib`
- STM32 project setup in CLion: [setup tutorial](https://www.jetbrains.com/help/clion/embedded-stm32.html)  
→ It should compile now!

**Other**
- Monitor UART serial from STM32 using arduino ide in terminal: `arduino-cli monitor -c <boud_rate> -p /dev/ttyACM<number>`

**Resources:**
- FreeRTOS full tutoriál (actually mi pomohl s používáním semaforů, mutexů, even flagů) (rozmyslete si, jestli chcete nebo nechcete používat CMSISV2): [youtube playlist](https://www.youtube.com/playlist?list=PLnMKNibPkDnExrAsDpjjF1PsvtoAIBquX)
- Some STM32 full tutorial (usefull just for some stuff): [tutorial web](https://www.compilenrun.com/docs/category/stm32-tutorial/)
- [STM32 Timer calculator](https://deepbluembedded.com/stm32-timer-calculator/)

### NXP (úložky 5-6)
- Možná si budete muset `openocd` zkompilovat sami (maybe je i jiné řešení, ale kompilace ze zdrojáků je nejjednodušší), protože release nemusí mít potřebný `s32k.cfg` (překvapivě i Arch linux potřeboval manuální kompilaci ).
- Monitor UART serial from STM32 using arduino ide in terminal: `arduino-cli monitor --protocol esrial =c boudrate=1000000 -p /dev/ttyACM<number>`
- Musí vás potahat dokumentace (pozor! v dokumentaci jsou přiložené potřebné xlsx tabulky (apparently pdf has this feature)).
- Pozor na codebook příklady, některé nebudou fungovat jen ctrl+c, ctrl+v.
- Pokud si bricknete desku, tak nezoufejte. Napište Burešovi, on ví co s tím (don't ask how I know).

## Zakončení předmětu
### Zápočet
- Na cvika netřeba chodit, jen udělat 6 praktických úložek na půjčeném hardware.
- Nepodceňujte úložky časově, protože každá je časově minimálně na celý den (nebo celou noc nebo obojí (znalosti získané praxí)).

### Zkouška
- Oficiálně je potřeba mít hotový zápočet, abyste mohli na zkoušku. Pokud ale nestíháte, tak stačí mít alespoň většinu assignmentu 5 (ten na NXPčku, kde se šahá na registry) a domluvit se s Burešem.

- Zkouška se skládá z **písemné části** a **vysvětlení části vámi napsaného kódu** z úložek 5/6 (NXP).
	- Bureš vám nejdříve zadá nějaké témátko a budete mít čas si ho na papír vypracovat. Pak si to přečte a případně se doptá nebo vám dá čas ještě něco dopracovat.
	- Pro vysvětlení kódu vám ukáže kus kódu a zeptá se co dělá. Je k dispozici dokumentace, takže stačí na místě ctrl+f na registry a zvládnout s dokumentací kód vysvětlit.
- Známka je v praxi čistě z písemné části. Vysvětlení kódu je jen aby věděl, že jste ho alespoň částečně psali vy.

**Obsah zkoušky přímo dle slov Tomáše Bureše:**
- Ne důkazy
- Umět ke všemu nakreslit schedule, to prý chce.
- EDF, Rate Monotonic - Schedulability/feasibility analysis, umět nakreslit schedule.
- Priority Inheritance Protocol, Priority Ceiling Protocol, problém priority inversion
- Možná nějaké priority servery.
- Komunikační protokoly spíš ne. Jen možná, když bude na zkoušce hodně lidí a nevyzbudou mu jiná témátka.
- Pak se podíváme do kódu na úložky 5 a 6 (STMko ho nezajímá). Jen říct třeba co dělá co, bude k dispozici dokumentace, chce jen vidět, že jsme to psali mi a tušíme co s tím. (v praxi nám při zkoušce ukázal na nějaký registr a zeptal se proč do něj zapisujeme/čteme z něj. K tomu nám dal dokumentaci, taže to stačilo najít v ní a interpretovat.)
