Установка
SDCC
Есть соблазн установить из репозитория:
$ sudo yum install sdcc
но, поскольку там довольно старая версия (для такой новой для sdcc архитектуры, как stm8), то рекомендую ставить последний снапшот отсюда: находим нужную нам архитектуру i386 или AMD64 и качаем предскомлиленный архив бинарников:
wget http://freefr.dl.sourceforge.net/project/sdcc/snapshot_builds/amd64-unknown-linux2.5/sdcc-snapshot-amd64-unknown-linux2.5-20151028-9381.tar.bz2 tar xjf sdcc-snapshot-amd64-unknown-linux2.5-20151015-9358.tar.bz2 cd sdcc sudo cp -a * /usr cd .. rm -rf sdcc sdcc-snapshot-amd64-unknown-linux2.5-20151015-9358.tar.bz2
Проверить корректную установку можно командой:
sdcc -v
hex2bin
Аналогично устанавливаем последнюю версию hex2bin, которой получаем бинарь, который в свою очередь будем кормить программатору:
wget http://heanet.dl.sourceforge.net/project/hex2bin/hex2bin/Hex2bin-2.1.tar.bz2 tar xjf Hex2bin-2.1.tar.bz2 cd Hex2bin-2.1 make clean CFLAGS='-Wall -Wextra -std=c99' make sudo make install cd .. rm -rf Hex2bin-2.1.tar.bz2 Hex2bin-2.1
stm8flash
Есть такой замечательный программатор stm8flash, который позволяет зашивать STM8 через стандартный st-link (или его китайские клоны) по интерфейсу SWIM; скачиваем и устанавливаем:
git clone https://github.com/vdudouyt/stm8flash.git cd stm8flash make sudo make install cd .. rm -rf stm8flash
Дополнительно хорошо бы установить рулы для возможности работы с st-link из под обычного юзера, для чего заимствуем готовые файлы из опенсорсного проекта st-link’а для STM32:
sudo wget https://raw.githubusercontent.com/texane/stlink/master/49-stlinkv1.rules -O /etc/udev/rules.d/49-stlinkv1.rules sudo wget https://raw.githubusercontent.com/texane/stlink/master/49-stlinkv2.rules -O /etc/udev/rules.d/49-stlinkv2.rules sudo wget https://raw.githubusercontent.com/texane/stlink/master/49-stlinkv2-1.rules -O /etc/udev/rules.d/49-stlinkv2-1.rules sudo udevadm control --reload-rules
Альтернативные инструменты
Справедливости ради, отмечу существование stm8flasher — утилиты, которой можно шить по UART старшие STM8, имеющие встроенный загрузчик, но в силу того, что не работаю с «жирными» STM8 эту утилиту не пробовал.
Также, начиная с весны 2016г, стал подностью бесплатным французский компилятор Cosmic, к сожалению, версия для линукса хоть и существует, но недоступна свободно и поставляется на отдельных условиях (с демоном лицензий flex lm).
Использование
Пример
Компиляция проекта из одного файла-исходника:
sdcc -lstm8 -mstm8 -opt-code-size --out-fmt-ihx $(CFLAGS) $(LDFLAGS) project.c
Конвертация в bin:
hex2bin -p 75 project.ihx
Зашивка:
stm8flash -cstlinkv2 -pstm8s103 -s flash -w project.bin
Разбор примера
sdcc
Основные опции sdcc, которые скорее всего потребуется использовать:
- -c для компилирования в объектник (типичный проект с несколькими исходными файлами, линковка будет запущена отдельной командой)
- —std-c99 для компиляции согласно стандарта C99 (в действительности, C99-фичи поддержаны только частично, но на моих исходниках необходимо указывать эту опцию, инача sdcc вылетает с ошибкой)
- —opt-code-size для оптимизации выходного байт-кода по размеру
hex2bin
- -p [value] — значение (в hex), которым будут заполняться пустые ячейки (0х75 — недопустимый опкод для архитектуры stm8, его выполнение приводит к переходу в процедуру reset)
- -s [address] — также есть опциональная возможность задания стартового адреса (в hex, фактически — смещение)
stm8flash
Общий формат команды:
stm8flash -c <stlink|stlinkv2> -p <partname> [-s flash|eeprom|0x8000] [-r|-w|-v] <filename>
Note!: В последней версии появилась поддержка формата hex и возможность программирования OptionBytes.