\section{Vývojové prostredie a RTOS} \label{sec:vyvojove_prostredie}
Pre programovanie mikrokontroléra STM32F407VG je na výber z viacerých vý\-vo\-jo\-vých prostredí. Na stránkach STMicroelectronics (\cite{STM32_IDEs}) nájdeme zoznam vý\-vo\-jo\-vých prostredí podporujúcich rodinu procesorov STM32. Z nich môžeme uviesť vlastnosti niektorých vyskúšaných prostredí:
\begin{enumerate}
    \item[-] \emph{Atollic TrueSTUDIO}: vývojové prostredie založené na Eclipse. Priamo podporuje STM32F4Discovery. Jeho výhoda je v jednoduchom nastavení projektu a pohodlnom ladení programu (debugging). Voľná verzia, ktorú Atollic poskytuje, je ale obmedzená na maximálne 32 kB kódu a nemá sprístupnené všetky možnosti v porovnaní s profesionálnou verziou.
    \item[-] \emph{CrossWorks for ARM}: jedná sa o vývojové prostredie od firmy Rowley Associates. Priamo podporuje STM32F4Discovery. Jeho hlavnou výhodou je, že je multiplatformný, čiže je možné ho využívať vo Windowsoch, Mac OS X a rôznych distribúciach Linuxu. Ďalšia výhoda je veľmi svižné prostredie a rýchly debugger. Bohužial neexistuje free verzia.
    \item[-] \emph{CooCox CoIDE}: jediné vývojové prostredie, ktoré je dostupné vo free verzii. Je založené na odľahčenej a orezanej verzii Eclipse a plne podporuje STM32F4\-Discovery kit. Na vývoj jednoduchých aplikácií a pri využívaní knihovien od ST je veľmi vhodné. Bohužiaľ neumožňuje vytvárať projekty z makefile súboru, čo bráni jednoduchému používaniu použitého RTOS. Preto bude software písaný v nasledovnom IDE.
	\item[-] \emph{Eclipse+GCC ARM+OpenOCD}: táto možnosť popisuje ako získať multiplatformné IDE, ktoré je úplne zadarmo a je plne postačujúce pre vývoj projektu. Nevýhodou je problematické nastavenie. IDE je potrebné poskladať z viacerých komponentov. Jedná sa o Eclipse s doinštalovanými doplnkami (podora C/C++, hardwarový debugger), kompilátor (gcc pre ARM s podporou CortexM4 a hard floating point) a OpenOCD (programátor a debugger s podporou STlink/v2).
\end{enumerate}

Pre takto veľký projekt je výhodné použiť niektorý z voľne dostupných systémov reálneho času (RTOS -- Real Time Operating System). Asi najznámejší RTOS pre embedded systémy, freeRTOS, nepodporuje vo verzii pre CortexM4F kompilátor GCC. Možnosťou by bolo využiť port z CortexM3. Tu by sme však nemohli využívať FPU jednotku. Aby sme sa vyhli nutnosti dopisovať do freeRTOS kód pre prácu s FPU, rozhodli sme sa použiť iný RTOS. Jedná sa o RTOS s označením \emph{ChibiOS/RT} \cite{chibios}. Jeho základné vlastnosti sú:
\begin{enumerate}
	\item[-] efektívne a prenositeľné preemptívne jadro,
    \item[-] výborný výkon pri prepínaní kontextov,
    \item[-] statická architektúra (všetko je staticky alokované pri kompilácii),
    \item[-] voliteľná podpora dynamických rozšírení, dynamických objektov,
    \item[-] podporuje vlákna, virtuálne časovače, semafory, mutexy, podmienené pre\-men\-né, správy, mailboxy, príznaky udalostí, fronty, atď.,
    \item[-] HAL vrstva, podporujúca veľké množstvo periférií, ako napr. Porty, Sériové rozhranie, ADC, CAN, EXT, GPT, I2C, ICU, MAC, PWM, RTC, SDC, SPI, UART, USB,
    \item[-] podpora externých súčastí, napr. {\footnotesize LW}IP, FatFs, rozhranie pre grafické displeje.	       	
\end{enumerate}

ChibiOS/RT je pod neustálym aktívnym vývojom, na stránkach nájdeme dobrú dokumentáciu, rôzne návody a príklady. K STM32F4Discovery existuje demo a\-pli\-ká\-cia, kde je overená funkčnosť niektorých periférií (ADC, SPI, PWM) a názorne ukázaný spôsob práce so systémom. Na stránkach ChibiOS/RT sa takisto nachádza návod ako zostaviť vývojové prostredie.

Nevýhodou je, že v HAL vrstve chýba podpora pre I$^2$S a FSMC periférie. Pri tvorbe firmwaru musela byť podpora týchto periférií doplnená svojpomocne.