Vývojové nástroje jsou asi největší slabinou celého ekosystému STM8. Výrobce
dodává vývojové prostředí STVD
(návod zde),
které je sice dostačující, ale staré a již nevyvíjené. Navíc se občas stane, že
na nějakém PC je problém to rozjet. Kompilátor Cosmic sice funguje, ale ta neustálá
kontrola licence, je fakt opruz; … a jeho chybová hlášení mi taky
nepřišla úplně srozumitelná.
A to jsem ještě nezmínil to hlavní: Na Linuxu to nejede!

Takže, co s tím? Použijeme OpenSource nástroje! Co je potřeba?
- Vývojové prostředí
- Kompilátor
- Programátor/Flasher — software, kterým program do čipu nahraju
- Debuger
Když jsem to celé tvořil hodně mi pomohla tato stránka, tak se tam můžete mrknout: https://github.com/hbendalibraham/stm8_started.
Předpřipravená instalace¶
Připravil jsem pro vás výukovou image systému Devuan Linux, kde je vše již nastaveno a nainstalováno. Nemusíte tedy vše ručně instalovat, stačí:
- nainstalovat VirtualBox
- do VirtualBoxu doinstalovat Extension Pack
- stáhnout si připravený image: Devuan-X-MIT.ova a importovat si ho.
Něco málo o obrazu:
- aktualizováno dne 1. 12. 2025
- velikost 6,8 GB
- release: Devuan 6 Excalubur like Debian 13 Trixie,
- desktop: Openbox + xfce4-panel
- https://mamut.spseol.cz/nozka/public/virtual-img-ova/Devuan-X+MIT.ova
- Jak použít Virtualbox a předpřipravený image:
- MIT-Virtualbox

… i tak si ale přečtěte následující text ať víte, jak to máte použít.
Toolchain¶
Připravil jsem startovací strom zdrojových kódů a Makefile.
https://gitlab.com/spseol/mit-no/STM8S-toolchain
Tento toolchain se dá použít v Linuxu, v MacOS i ve Windows. Nutno ale říct, že toolchain je vyvíjen a primárně určen pro Linux.
Instalace¶
Pozor na verzi SDCC
V překladači SDCC (nezávisle na OS) je ve verzi 4.5.0 chyba, díky které je nepoužitelný pro platformu STM8. Chyba je již opravená, ale je třeba si dát pozor a nainstalovat verzi 4.4.0 nebo noční build.
Linux¶
V Linuxu zavoláte něco jako:
1 | |
installace SDCC ze zdrojových kodů¶
Někdy se snane, že ve vaší distribuci není SDCC v té správné vezi, nebo si chcete
nainstalovat noční build. Já pro instalaci nedistribuční balíčků používám program
Stow.
1 | |
Knihovny a závislosi nutné pro build se dají nainstalovat takto:
1 | |
Potom už jen stáhnete zdrojaky, rozbalíte a instalujete:
1 2 3 4 5 6 7 | |
Ještě málá poznámka: SDCC podporuje mnoho různých platforem, které jsou pro mě
nepotřebné. Proto moje ./configure vypadá takto:
1 2 3 4 5 6 7 8 | |
MacOS¶
V MacOS by to měla být pohoda, protože je to také Unix. Stačí HomeBrew:
1 | |
U toho sdcc pozor na verzi 4.5.0!. V současné době je tedy třeba sdcc buildnou ze
zdrojových kódů.
Takže místo…
1 | |
… si stáhnete zdrojáky, rozbalíte, a ….
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Windows¶
Věnoval jsem hodně času portu na Windejs. Mrkvosoft mi ale hází dost klacky pod nohy: odladím to — chodí to, příjde aktualizace — a já můžu zase ladit další problém. Prostě to zlobí a já nemám absolutně žádnou motivaci to ladit, ptotože nevím, kdy mi zase Mrkvosoft práci zničí; a na W11 jsem to ani nezkoušel. Kompilace je děsně pomalá. Takže moje rada zní:
Hint
Pokud skutečně trváte na Windejs a máte nějaký dobrý důvod, proč tento nedovyvynutý OS používáte, nainstalujte si VirtualBox a použijte, předpřipravenou instalaci.
Niméně v současné době se zdá, že Toolchain na Windejs funguje, takže pokud máte odvahu, dejte se do toho:
Ve Windows je nejsnadnější instalovat pomocí Chocolatye:
1 2 3 | |
Pokud ještě nemáte Python, můžete i Python:
choco install python
Bash je součásti balíčku Git.
Ve Windows ještě stojí za to malinko si Bash připravit, aby fungoval dobře s make.
Proto si si nakopírujte konfiguraci s .make/bashrc do domovského adresáře.
1 | |
Instalace SDCC se musí naklikat. Instalátor stáhnete zde: https://sourceforge.net/projects/sdcc/files/sdcc-win64/
Pro flashování se na Windows používá STVP. Pokud už jste nainstalovali STVD máte už STVP nainstalováno, protože je součástí jeho instalace. Je možné ho naistalovat i zvlášť — bez STVD.
Projekty a knihovna SPL¶
Adresářová struktura jednotlivých projektů vypadá takto:
MIT
├── Projekt-1
│ ├── inc
│ ├── lib
│ └── src
├── Projekt-blikblik
│ ├── inc
│ ├── lib
│ └── src
├── SPL
│ ├── inc
│ └── src
└── SPLSPL
├── inc
└── src
Udělejte si adresář, kde budou všechny vaše projekty — v uvedeném příkladu je to MIT. V tom stejném adresáři budou i adresáře nazvané SPL a SPLSPL. V
SPL adresářích je Standard peripheral library od firmy
ST. Tato knihovna má dost divnou licenci a proto vám ji
nemůžu jen tak dát. Měli byste si ji
najít
a stáhnout. Pak je
třeba ještě aplikovat patch,
který knihovnu předělá tak, aby se dala použít s naším SDCC kompilátorem.
Celé je to docela pracné, … ale zkuste napsat make spl třeba se to zařídí samo.
Tip
Vytvoření projektu je možné automatizovat s jednodchou sadou skriptů dostupnou v repositáři STM8S new project automation.
Další automatizace je dostupná v repositáři GitLab project interactive CLI, pomocí kterého si můžete velmi usnadnit založení nového projektu na GitLabu.
Použití¶
make spl— stáhne a nachystá knihovnymake— provede kompilacimake flash— nahraje program do chipumake clean— smaže všechno, co nakompilovalmake rebuild— smaže vše a znovu zkompilujemake openocd— spustíopenocdpro debugmake debug— spustí STM8-gdb
Konkurence :)¶
Ještě bych měl zmínit, že kolega Wykys vytvořil také toolchain, který je o dost jednodušší a tím pádem i přehlednější:
https://gitlab.com/wykys/stm8-tools
Vývojové prostředí¶
Já používám Vim respektive Neovim. Ne každému ofšem toto prostředí vyhovuje, takže jako editor a vývojové prostředí doporučuji VScodium/VScode.
Instalace je popsána zde.
Kompilace¶
K dispozici jsou celkem tři Makefile v adresáři .make. Je to proto, že kompilátor
SDCC nedokáže odstranit mrtvý kód. Existují asi tři řešení. To první je
nejoptimálnější, další dvě řešení jsem tu nechal pro strýčka příhodu. Když poprve zavoláte make přepne se toolchain do tohoto nejoptimálnějšího řešení zvaného sdcc.
K dispozici jsou tedy celkem tři Makefile v adresáři
.make.
Přepnutí jen realizováno jako symlink Makefile do root-adresáře projektu.
1 2 | |
Na divných systémech, které symlink neumí (například Windows) se natvrdo kopíruje,
takže tato operace může být ztrátová. V Makefile je vše připraveno, takže
stačí volat make.
1 2 3 | |
Pokud váháte který zvolit, zvolte hned první řešení: SDCC
Řešení 1: SDCC¶
SDCC - Small Device C Compiler je kompilátor
pro různé, více či méně známé 8-bitové architektury. Z hlediska STM8 má jednu
zásadní nevýhodu: nedokáže odstranit nepoužívaný kód. Co to znamená? No…
pokud si všechno píšete sami, tak to prakticky neznamená nic. Pokud ovšem
použijete nějakou knihovnu (jako například SPL), tak už vám to začne hodně
vadit, protože výsledný strojový kód obsahuje spoustu funkcí, které jste
kompilovali jen proto, že byli součástí knihovny a ne proto, že jste je chtěli
použít. Tyto funkce nejsou nikde volány a proto by je měl
linker odstranit. No a to je přesně to, co
se nestane :-(.
Ve výsledku program, který by mohl mít cca 2-3 kB má 30 kB.
Naštěstí existuje jeden hack, který funguje
asi takto: Knihovna SPL se rozdělí do malých souborů (co funkce, to soubor) a každý se
kompiluje jako samostatný modul. Z těchto modulů se udělá knihovna, se kterou SDCC
linker už umí správně pracovat. Proto je v adresářové struktuře knihovna SPL dvakrát.
SPLSPL znamená SPLit SPL a
používá se právě na toto.
Další řešení tohoto problému je použít níže uvedené SDCC-gas nebo sdccrm.
Instalace SDCC v Linuxu je poměrně snadná, protože SDCC je součásti většiny Linuxových distribucí; takže zavoláte něco jako:
1 | |
Ve Windows si stáhnete instalátor a pokračujte, ve Windows oblíbeným klikáním.
Řešení 2: SDCC-gas¶
https://github.com/XaviDCR92/sdcc-gas
Note
Toto řešení je v současné době spíše historický pozůstak a v 98,45% případů není třeba se jim zabývat. Klidně si tento odstavec přečtěte, ale asi toto řešení nebudete chtít použít…
Toto je asi nejlepší řešení optimalizace (vyhození) mrtvého kódu. Vzniklo
přidáním podpory GNU Assembleru
tedy gas do SDCC 3.9.0. gas je
výhodou i nevýhodou tohoto řešení. Na jednu stranu to znamená, že můžeme
používat klasické nástroje z GNU
binutils, na druhou stranu to
znamená, že nelze použít ty části sdcc-libraries, které jsou napsané v STM8
assembleru a je nutné použít méně optimální kód napsaný v C nebo STM8 assembler
přepsat do GNU assembleru. …no a zřídka se stane, že nějaká vnitřní
funkcionalita (například násobení 64-bitových integerů) je napsaná jen v STM8
assembleru a vám nezbude, než to nějak obejít nebo danou funkci přepsat do GNU assembleru.
Pokud vás to zajímá více můžete si počíst zde a zde
Toto je důvod proč v Makefile sdcc-gas jsou tyto řádky:
1 2 3 4 | |
Případné problémy chybějících funkcí lze tedy vyřešit doplněním jména souboru
do proměnné SDCC_LIB_SOURCE.
Aby vše fungovalo musíte si stáhnout výše zmíněné zdrojové kódy a buildnout je. Já to dělám takto (používám stow):
1 2 3 4 5 6 7 8 9 10 | |
Podobný postup použijete pro STM8 port GNU binutils, který je potřeba pro linkování a debug.:
1 2 3 4 5 6 7 8 9 10 | |
Tato výše popsaná kompilace ze zdrojových kódů je teoreticky možná i na Windows, pomocí projektu Cygwin. Prakticky jsem to nikdy nezkoušel. Osobně bych šel (tedy pokud by mě někdo donutil používat Widejs) spíše cestou Windows Subsystem for Linux. Instalace WSL 2 je velice jednoduchá. Bohužel do WSL se nativně nedá připojit USB — ale dá se to řešit.
Řešení 3: sdccrm¶
Poznámka:
Toto řešení je v současné době spíše historický pozůstak a v 99,974653% případů není třeba se jim zabývat. S klidem tuto kapitolu přeskočte…
sdccrm je nástroj pro optimalizaci mrtvého kódu pro port stm8 SDCC, který
odstraňuje nepoužívané funkce.
https://github.com/XaviDCR92/sdccrm
Jak to funguje?: Kód se nejprve zkompiluje do assembleru klasickým
SDCC, poté se pomocí sdccrm vymaže kód, který se nepoužívá,
celý proces se dokončí a kód se převede z assembleru do strojového kódu.
Je to řešení tak nějak na půl cesty: Funguje, strojový kód je opravdu menší, ale tato možnost vylučuje použití debugeru. To někdy, někomu vadit může, jindy jinému to vadit nemusí.
Dále je nutné ručně zadat funkce, které nechcete “optimalizovat” — tedy vyhodit.
Proto je třeba sledovat chybová hlášení a název chybějící funkce zadat do souboru exclude_reference uvnitř projektového adresáře.
Instalace¶
sdccrm si musíte buildnout ze zdrojových kódů. Jde o celkem malý program bez
závislostí, takže jde jednoduše kompilovat v Linuxu i ve Windows —
nicméně pro jistotu je Windows binárka součástí startovacího
toolsetu a je v souboru .make/sdccrm.exe.
Ve Windows:
1 | |
nebo v Linuxu:
1 | |
a pak jen:
1 2 | |
Flashing¶
STVP¶
STVP je software od výrobce čipů ST. Umožňuje přístup do všech částí paměti mikrokontrolérů. Má grafickou verzi i verzi pro příkazový řádek. Právě na verze pro příkazový řádek se spoléhá zde zmiňovaný toolchain.
OpenOCD¶
Open On-Chip Debugger je nástroj pro debug a krokování
programu přímo na čipu. openocd umí i nahrát program do paměti zařízení.
Funguje v Linuxu i ve Windows.
Instalaci zajistí na Linuxu jednoduchý příkaz:
1 | |
na Windows je to díky Chocolatye podobně jednoduché.
1 | |
Toto se řeší v Makefile pomocí proměnné OPENOCD, takže si ji případně upravte.
Aby openodc umělo i pouhé flashování, je třeba přidat
skript,
který to umí. Ten je buď součástí
startovacího toolsetu nebo ho můžete přidat
na konec konfiguračního souboru stm8s.cfg:
1 2 3 4 5 6 7 8 9 10 | |
V Linuxu by celá cesta mohla vypadat takto: /usr/share/openocd/scripts/target/stm8s.cfg.
Pokud jste do Windows instalovali pomocí Chocolatye, bude to nejspíš tato cesta:
C:\ProgramData\chocolatey\lib\openocd\tools\OpenOCD-20190828-0.10.0\share\openocd\scripts\target\stm8s.cfg.
stm8flash¶
Druhá možnost je program stm8flash. Ve většině linuxových distribucí je třeba
ho ručně buildnout.
https://github.com/vdudouyt/stm8flash
Debuging — Ladění¶
GDB (GNU Debugger) je standardní nástroj na hledání chyb v software. Pokud budeme chtít program krokovat a za běhu se dívat do proměnných budeme potřebovat právě upravený STM8-GDB z GNU binutils a OpenOCD (Open On Chip Debuger).
OpenOCD¶
openocd tedy Open On-Chip Debugger je nástroj, pomocí kterého komunikujeme s čipem
a spouštíme/zastavujeme/krokujeme program. Pouští se to takto:
1 | |
Nebojte nemusíte to vždy znovu vypisovat. Je to napsané v Makefile, takže stačí zavolat
1 | |
STM8-GDB¶
Zdrojáky si stáhnete na SourceForge. Instalaci jsem popsal výše. Pro přehlednost ještě jednou:
1 2 3 4 5 6 7 8 9 10 | |
Pokud je vše nainstalováno můžeme zavolat stm8-gdb:
Takže… v dalším terminálu otevřeme gdb a dáme se do ladění. Než
provedete toto, ujistěte se, že openocd již běží.
1 | |
opět stačí zavolat make
1 | |
Rychlokurz STM8-GDB¶
Takže máme dva terminály: v jednom běží OpenOCD a ve druhém běží GDB.
Nenechte se odradit
Ano, je to textové rozhraní, žádná klikátka ani pouťové efekty. Pouze textové příkazy. Nicméně v dalším kroku vám ukážu gdbgui, což je krásné klikátko. Ale i v tomto klikátku se vám textové příkazy můžou dobře hodit.
V programu funguje tabulátor. To znamená, že při stisku klávesy TAB se
GDB pokusí uhodnout, co chcete napsat a doplní slova tak, aby byla smysluplná.
list main,list main.c:20,list main.c:setup- nalistuje ve zdrojovém kódu příslušné místo, řádek, funkci
b main,break main- nastaví breakpoint na vstup do funkce
main b 48,break 48- nastaví breakpoint na řádek 48
b milis.c:48,break milis.c:48- nastaví breakpoint na řádek 48 v souboru
milis.c info b,info breakpoints- vypíše informace o breakpointech
info sources- vypíše seznam zdrojových souborů
d 2.delete 2- vymaže breakpoint 2
r,run- spustí program
interrupt, Ctrl+C- přeruší program, program se zastaví tam, kde zrovna teď je
s,step- vykoná jeden příkaz/řádek zdrojového kódu
n,next- vykoná jeden příkaz/řádek zdrojového kódu, funkci vykoná jako jeden příkaz — nebude vstupovat do funkce
fin,finish- dokončí funkci, ve které se program právě nachází (pokud v ní není další breakpoint)
c,cont,continue- pokračuje v běhu programu, dokud nenarazí na breakpoint
p time,print time- vypíše obsah proměnné
time p time,print time- vypíše obsah proměnné
time display time- vypíše obsah proměnné
timepokaždé, když se program zastaví undisplay 2- už nebude vypisovat řádek 2, když se program zastaví
Zde něco málo více k příkazům print a display.

gdbgui¶
gdbgui je browser-based frontend pro gdb. Je to napsané
v Pythonu a instaluje se přes pip.
1 | |
nebo lépe
1 | |
opět je vše zapsáno v Makefile, takže pokud běží openocd stačí zavolat
1 | |
STM8 Debugger for vsCode/Codium¶
https://marketplace.visualstudio.com/items?itemName=CL.stm8-debug