Skip to content

spseol/STM8S-toolchain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

97 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

STM8 (SPŠE) toolchain

Tři mejkfaily pro studenta

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á.

Který Makefile vybrat?

Detailní popis najdete na https://chytrosti.marrek.cz/stm8oss.html.

SDCC

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

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.

sdccrm

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.

Použití

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

Závislosti

Na Windows

choco install git make vscode mingw