Doka avatar

Журнал Эмбеддед-Инженера

О микроэлектронике, радиотехнике и хобби

Dmitry Murzinov

2 минут чтения

Установка

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.

Последние записи

Разделы