- Toto je startovací strom zdrojových kódů a
Makefile
pro výuku Mikroprocesorové techniky s STM8S. - Strom je určen pro překladač SDCC nebo SDCC-gas.
- Standardní knihovna pro práci s periferiemi
SPL
by měla být (z licenčních důvodů) stáhnou zvlášť ze stránek výrobce a použít
patch -- napište
make spl
. - Konkurence a inspirace: \
K dispozici jsou celkem tři Makefile
v adresáři .make
. Na začátku si musíte
jeden z nich vybrat:
make sdcc # nebo
make sdcc-gas # nebo
make sdccrm # nebo
Pokud si nejste jistí, co vybrat, vyberte si sdcc
a napište
make sdcc
Potom můžete mezi nimi přepínat:
make switch-sdcc
make switch-sdcc-gas
make switch-sdccrm
Přepnutí jen znamená, že se udělá symlink do root-adresáře projektu. Na divných systémech, které symlinky neumí (například Windows) se natvrdo kopíruje, takže tato operace může být ztrátová. Na normálních systémech (asi všechny, kromě Windows) je tato operace bezztrátová.
Detailní popis najdete na https://chytrosti.marrek.cz/stm8oss.html.
Z hlediska STM8 má SDCC jednu zásadní nevýhodu: nedokáže odstranit mrtvý nepoužívaný kód. To může zapříčinit velké binární soubory plné nepoužívaného kódu. Pokud nepoužíváte knihovny 3. stran asi vám to nevadí. U SPL je tato nevýhoda vyřešena použitím SPL rozdělené na malé soubory.
SDCC-gas vzniklo, aby vyřešilo problém optimalizace mrtvého kódu 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.
Toto řešení je jen jakýsi historický pozůstatek a v 99% případů ho nepotřebujete a nechcete použít.
sdccrm je nástroj pro optimalizaci mrtvého kódu vytvořeného SDCC, který odstraňuje nepoužívané funkce. 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. Z logiky věci toto řešení vylučuje použití debugeru.
Dále je nutné ručně zadat/editovat 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.
Nejprve je třeba v Makefile
správně nastavit µprocesor a jeho frakvenci;
případně cestu k instalaci SDCC
STVP.
#DEVICE_FLASH=stm8s103f3
DEVICE_FLASH=stm8s208rb
### STlink version for falsh2 targer (stm8flash program)
#STLINK=stlinkv2
#STLINK=stlink
STLINK=stlinkv21
F_CPU=16000000
ifeq ($(OS),Windows_NT)
CC_ROOT = "/c/Program Files/SDCC"
STVP_ROOT = "/c/Program Files (x86)/STMicroelectronics/st_toolset/stvp"
else
CC_ROOT = /usr
endif
Pokud používáte sdccrm
je ještě potřebné v Makefile
odkomentovat nebo
zakomentovat nebo přidat ty části SPL knihovny, které zrovna (ne)používáte.
SPL_SOURCE = stm8s_gpio.c stm8s_clk.c stm8s_tim4.c stm8s_itc.c
SPL_SOURCE += stm8s_uart1.c
#SPL_SOURCE += stm8s_adc2.c
#SPL_SOURCE += stm8s_tim1.c
SPL_SOURCE += stm8s_tim2.c
#SPL_SOURCE += stm8s_tim3.c
... no a potom už jen bastlíte, programujete a voláte make
.
Pokud používáte sdcc-gas
budete možná muset vytvořit pro váš µprocesor
linker-script. Jsou to soubory s příponou *.x
v adresáři .make
. Tento
toolchain zatím obsahuje pouze linker-scripty pro µprocesory: stm8s003f3
,
stm8s103f3
a stm8s208rb
. Pokud tak učiníte, jistě mi jej zašlete k zařazení
do tohoto toolchainu.
příkaz | |
---|---|
make spl |
stáhne a nachystá knihovny |
make |
provede kompilaci |
make flash |
nahraje program do chipu. Na Linuxu se použije OpenOCD. Na Windows se použije STVP verze pro příkazový řádek. |
make flash2 |
záložní varianta, protože OpenOCD někdy nechce čip naprogramovat (používá stm8flash). |
make clean |
smaže všechno, co nakompiloval |
make rebuild |
smaže vše a znovu zkompiluje |
make openocd |
pustí openocd pro debug |
make debug |
spustí STM8-gdb |
- GNU Make
- GNU Bash -- ten se na Windows dá nainstalovat společně s Gitem.
- SDCC nebo SDCC-gas
- STM8 binutils (
stm8-gdb
,stm8-ln
) - OpenOCD pro
flash
adebug
nebo STVP proflash
na Windows. - (stm8flash pro
flash2
)
choco
install git make vscode mingw