STM32 и Питон

Оказывается, существует реализация интерпретатора Python3.х для STM32. Сайт проэкта находится здесь. Проэкт стартовал на Кикстартере, были собраны средства (в декабре 2013 года) и софт на данный момент уже доступен для свободного скачивания в GitHub (Прямая ссылка для скачивания архива с исходниками).


Микропитон это легковесная имплементация стандартной версии интерпретатора CPython. На данный момент реализована полная поддержка синтаксиса интерпретатора версии 3.4. Поддерживаемые типы данных: str(пока что без поддержки Юникода), bytes, bytearray, tuple, list, dict, set,
array.array, collections.namedtuple, classes and instances.

Встроенные в платформу модули это: sys, time и struct.
Реализация встроенных модулей неполная. Они не содержат всех аттрибутов, которые содержит их компьютерная версия. А реализованные функции или классы не всегда имеют полноценную версию или полный набор методов соответственно. Ограничено все по понятным причинам из за сложности реализации или же по причине бессмысленности определенных атрибутов на подобного рода платформах. Более подробно с набором аттрибутов можно ознакомиться с помощью терминала и встроенной функции dir() языка Питон а также читая документацию на Микропитон.
Выполнение программы может происходить как с внутренней памяти микроконтроллера так и с внешней карты памяти. Файлы просто записываются на устройство либо на карту памяти, а интерпритатор после загрузки устройства начинает их выполнять. Выполнение всегда начинается с файла boot.py и далее, если это явно не указано, выполняется main.py.
Следует заметить что проект еще находится в стадии ранней беты, и функциональность может расширятся со временем.

Официально поддерживаемая плата это pyboard v1.0 (на плате STM32F405R, акселерометр Freescale MMA7660, 2 кнопки и 4 светодиода), но проэкт планируется для перевода на другие распространенные отладочные платы — список здесь. В этом списке можно увидеть, что уже существует порт в частности и под демоборду STM32F4DISCOVERY.

Теперь подробнее о запуске питона на STM32F4DISCOVERY.
Для того, чтобы получить прошивку для целевой платы STM32F4DISCOVERY, проект нужно сначала собрать. Для сборки используется кросс компилятор gcc-arm-none-eabi.
Собирать проэкт нужно с папки /stmhal утилитой make. По умолчанию проэкт собирается для официальной платы, и для того чтобы собрать проэкт под нашу платформу, нужно указать это явно. Команда для сборки будет иметь уже следующий вид: make BOARD=STM32F4DISC. Результаты сборки будут находиться в /stmhal/build-STM32F4DISC. В этой папке, помимо обьектных файлов, находятся бинарники firmware0.bin и firmware1.bin а также файл firmware.elf. Бинарники по какой то причине разделены, поэтому прошивку заливать нужно из «исполняемого» файла firmware.elf. С firmware.dfu я не разбирался, но в туториалах с его помощью шьют через USB в режиме бутлоадера. Так как наша плата имеет ST-Link2 на борту, то прошивка через него, как по мне, актуальнее потому что не требует лишних «аппаратных» телодвижений ). Предварительно нужно «извлечь» прошивку в формате .hex из файла .elf через arm-none-eabi-objcopy firmware.elf -O ihex firmware.hex. Можно загрузить прямо с исполняемого файла через GDB сервер и arm-none-eabi-gdb — кто как любит. Далее прошиваем через встроенный отладчик с помощью ST-Link Utility или другой программы. Выходим с режима отладки и перезагружаем контроллер.

Теперь при подключении к microUSB разьему плата определяется как медиа устройство на 115кБ. Также поддерживается работа с платой в режиме терминала. Подключение к REPL Promt смотрим здесь. Выглядит это все таким образом:
Терминал
Целевая плата STM32F4DISCOVERY «из коробки» поддерживает не весь функционал оригинальной платы. Из модуля поддержки платы pyb (описание) нету поддержки Accel(акселерометр, хоть оный и есть на плате но от другого производителя), Servo(сервомашинки) и почему то DAC(встроенные в чип ЦАПы). Нету также поддержки внешней карты памяти.
Теперь попробуем написать простой пример. К порту PC1 подключен потенциометр. Каждые 500мс на канале PC1 выполняется преобразование АЦП и результат пишется во внутренню память в adc.dat. При этом моргает желтый светодиод. По нажатию пользовательской кнопки преобразования прекращаются и пишется время остановки. Загорается синий светодиод. Код выглядит так:
Код
Файл с данными:
Данные
Таким образом можно организовать лог данных с АЦП. Благодаря мощным типам данных языка Питон их легко преобразовывать, фильтровать, искать пиковые значения и т.п… Код выглядит при этом компактнее чем на С.

P. S.
Конечно похоже это все на очередную Ардуину. Функционал достаточно упрощенный, а возможности чипа используются очень минимально. Скорость выполнения так же относительно невысокая по сравнению с программой на С (тест).
С другой стороны интересна сама возможность и особенности работы интерпретатора на «железной» платформе. Возможно очень легко организовать лог каких то пользовательских данных с привязкой ко времени, например с датчика со SPI интерфейсом. Полезно будет для какой то пользовательской автоматики, где зачастую нужно поддерживать какой то параметр на уровне с определенным алгоритмом, так как высокая частота там в основном не нужна, а язык программирования достаточно мощный, чтобы абстрагироваться от низкоуровневых типов данных С и быстро написать и развить идею в физическую реализацию.
Файлы в топике: firmware.zip

Комментарии (77)

RSS свернуть / развернуть
Как по мне — подкупает возможность гибко изменять логику работы без прошивки контроллера.
0
Есть только одно замечание: питон примерно в 100 (сто) раз медленнее С/С++. Если это не важно, то все замечательно. Язык очень гибкий и простой. Можно очень быстро что-то написать.
З.Ы. Я бы никогда не стал бы его использовать в своих проектах. Жалко ресурсы уходящие в никуда…
+4
Если плата распбери или бигл бон, можно и пайтон использовать)))
0
инститьют закончил?
0
Да, несколько лет назад. Зачем оскорбления?
0
это не оскорбление
это я зафорсил про быдловузы
спрашивается, если поциент несет научный бред
0
Не согласен что бред, на beagleboard.org/Products/BeagleBone+Black есть много библиотек для работы с железом на python, так как там Linux. И там можно писать начиная от С заканичивая Java…
Согласен что на python риалтайм не сделаеш, но для демонстрации и простого прототипа может быть ок.
0
Если плата распбери или бигл бон, можно и пайтон использовать)))
там Linux. И там можно писать начиная от С заканичивая Java…

Oh, it's really, Captain? Habra-man detected…

P.S. Beagleboard, а тем более Raspberry, если что, уже как год — рыночный шлак и технологический отстой, как и штатовские TI Sitara Cortex-A8 чипы. В каком то смысле это все радует — у англо-саксов гонору дох@я, а по факту они уже них@я не могут конкурировать: ни по цене, ни по эксклюзивности, ни по know-how и тех.параметрам. Только пасть разевать и пугать мифическими отлучениями от технологического парадайза(в котором они уже сами на вторых ролях) пока еще не отучились.
-4
Критиковать чужое хорошо, что можете дать как альтернативу? 1986ВЕ91Т?
0
Особенно насчет know-how смешно.
+1
Особенно насчет know-how смешно
know-how подразумевает собой тайну, а значит эксклюзив. О какой тайне может идти речь в наше время, если:

1. 99.9% кода новейшей и постоянно обновляющейся операционной системы и всего ПО к ней лежит в открытом доступе. Имеется в виду Linux, BSD и все прочее генеалогически связанное с ними.

2. Layout-ы и технология изготовления самого перспективного на мировом рынке процессора не являются вообще никакой тайной и проданы более чем ста частным производителям во всем мире. Имеются в виду семейства ARM Cortex-A.

3. Заводы по пр-ву 90-95% замещающих электронных компонентов вместе с технологией изготовления находятся не в США или в Европе, т.е. никак не контролируются NATO.
0
1. Вообще ни о чем не говорит. Более того, код операционки интересен только тем, кто ее разрабатывает и гикам. Тем более, что это готовый продукт, а не перспективные наработки.
2. Да, проданы. Но разработаны они именно в США и именно разработка представляет собой know-how, а не готовый результат в виде лейаутов.
3. Это вообще до одного места. know-how это не готовые заводы, а технологии, которые лежат в основе производства на этих заводах. И этот know-how на 90% сосредоточен в штатах и ими же продолжает развиваться.

P.S. «контролируются НАТО» — спасибо, поржал. я бы, на вашем месте, перестал смотреть столько времени телевизор.
+2
Но разработаны они именно в США
Разве? ARM ж вроде британская контора.
а не готовый результат в виде лейаутов.
Тут вспоминаются китайские масочные МК, собранные из кусков чужих лейаутов)
0
ARM, как и большинство подобных контор — транснациональная контора www.arm.com/careers/life-at-arm/locations-around-the-world.php

Тут вспоминаются китайские масочные МК, собранные из кусков чужих лейаутов)

Именно, поскольку разработать собственное куда сложнее, чем скопипастить.
0
И тем не менее, конторка британская
ARM Holdings plc (ARM) is a British multinational semiconductor and software design company with its head office in Cambridge, England
К тому же, я думаю у них еще не было отделений по всему миру, когда они создавали первые АРМы лет 30 назад — согласно вики, другие конторы они начали покупать всего лет 15 назад.
0
Уговорил, британская. Сути дела это не меняет.
0
А я где-то говорил, что меняет?)
0
Скорее всего это намек на англоязычное произношение названия языка и на анекдот про «финишд МГИМО?».
+3
btw, там реально пайтон, потому что названо в честь «Цирка Монти Пайтона», а не безногого животного)
0
Ну, транскрипция названия языка — вопрос довольно спорный для многих языков, включая этот.
Я обычно питоном называю.
0
раз нарисовали змею — значит, питон
+1
а на заборе жопу нарисовали — значит,… интересно, что?
хотите косноязычия — я не против, сам ни разу мускул правильно не назвал. но «питон» — это «айванъев» вместо «иванова». в вику хоть загляните.
0
Заглянул.
Python[2] (МФА: [ˈpʌɪθ(ə)n]; в русском языке распространено название пито́н[3])
Кроме того, ни разу не слышал, чтобы Delphi произносили как «дэлфай» (да, именно так оно на самом деле и произносится), а Pascal — как «паскал».
0
А ещё Айфон айфОном называют.
0
А ещё многострадальная Java.
0
не трогайте земноводное :)
0
Вот-вот, в частности, я и об этом тоже. :-)
0
я разве где-то сказал, что «пайтон» — распространённее? но ещё раз — есть распространённый «питон», а есть правильный «пайтон».
надеюсь, вы-то не станете апеллировать к «неошибающимся миллионам»)
0
«Пайтон» — это примерно правильное прочтение английского слова Python. А вот как правильно язык называть — вопрос спорный. Среди других языков есть примеры и транскрипции, и транслитерации, и перевода.
0
*как правильно называть язык по русски
0
Правильно. Наглядный пример: «Россия» «Russia» но произношение на западе «Раша».
0
По этой причине в проекте используется мощный STM32
0
Что только люди не делают, лишь бы не учить нормальные языки программирования
+1
Двачую.
0
Только маленькое уточнение: языки адекватные задаче. Питон великолепен — на десктопах и смартфонах.
0
На десктопах он все также медленнее С/С++ — но это Вам не мешает. А тут так писец глаза выкаливает. Вас никто не заставляет на питоне ОС под МК делать. Может подскажите простой способ реализации на С/С++ (если Вы считаете эти языки нормальными, ну хотя бы «С») простой подгрузки и выполнения мелких программ например через веб морду или из внешней флеш памяти.
0
Это-то как раз несложно. А вот выудить программу прямо из железяки, поправить ее в блокноте и положить обратно без дополнительных инструментов — это позволяют только скриптовые движки.
0
Телит делал модули с Питоном. Вроде как на АТ91, а позже на каких-то мелких гнусмасах. Есть полдесятка реализаций бейсика на МК, вполне успешно работающих. Форт на МК превосходно себя чувствует — даже в сообществе статьи были. Но смысл пихать питон, джаваскрипт и прочие языки, созданные для виртуальной машины, работающей в ОС, а то и браузере, в МК? Надо законодательно запретить подобным извращенцам использовать что-то мощнее Z80, чтоб даже искушения не было.
0
Synapse делает радиомодули с Python.Работал с ними, очень удобно. Но согласен, мк не место для python.
0
Поскреби русскогоэтот модуль — найдёшь татаринаАРМ7. И готов поставить батл сорокаградусного, что там огрызок линукса типа бизибокса крутит питон-машину и сетевой стек.
0
Battle, bottle… не умничайте, Штирлиц, — пузырь или пол-банки.
0
Мэн, ты тему не андестендишь. Если на флэтнике спикнёшь «пузырь» сразу будуть аскать с какого ты вилледжа. А шпрехнешь «баттл» и сразу понятно что ништяк чувак.
0
Buttle, battle, bottle…
Сазан, Сезанн, Сезар…
Shiite, sheet, shit…
Бабель, Бебель, Гегель…
Poisson, Boisson…
Guy, gay…
Андестендьте тему, Штирлиц, и не умничайте, советскому офицеру это не к лицу!
0
Промежду шуток, британцы бутылку произносят как «бАттл», а битву как «бЭттл». Они такие, даже окей произносят как «окАй». И вообще островной инглиш дальше от совьет инглиш чем совьет инглиш от эмерикен. Я почему-то считал что совковая школа тяготеет к британскому английскому.
0
Вообще-то ботл и бэтл. А окай — это австралийцы.
А совковая школа тяготеет к международному английскому. Который куда ближе к американскому.
0
Мои «австралийцы» кто из Манчестера, кто из Девоншира, а кто говорит на самом что ни есть кокни. И акают они знатно.
0
там есть не только ARM, но и AVR. И линукса там нет.
0
Да, посмотрел, там самописная ось крутит самописный интерпретатор. Это кстати даже хуже — полноценная совместимость сомнительна.
0
У них свой продукт, совместимость с чем и зачем?
0
С десктопным интерпретатором, конечно. Понятно дело, эти крошки NumPy не потянут.
0
Там есть API для работы с сетью и железом. Достучаться без них к железу невозможно. Python там с ограничениями.
0
0
Питон — очень хуйовый на десктопах. Он хорош для бухгалтеров и финансистов, када надо какой-нибудь небольшой data warehouse обработать или что нибудь похожее. Так — тормозное говнище. Я skeinforge попытался перевести с питона на си — начало работать на пару порядков быстрее. Даже если учитывать, что половину тупо прогнал через транслятор.
0
Сначала хотел собрать их плату, но цена на STM32F405 примерно 15$ ((
Попробую собрать на STM32F4DISCOVERY. Большое спасибо!
0
Извращенцы… Я еще как-то перевариваю ардуину… но это пик!
0
Пик чего. Ардуино и интерпретатор Питон на МК — по моему разные вещи. Может в этом причина Вашего несварения.
0
Пик обленения… А несварения нету! Ардуйней приходится часто пользоваться… вполне нормально — но не те грабли чтобы что нибудь серьезное делать…
0
По ссылке, где производится сравнение в скорости выполнения, микропитон сравнивается с ардуинками. Т.е. сравнения с «чистым» С нет.
0
Мы в своем проект (World of Warhips) сравнивали питон и С/С++: в среднем примерно в 100 раз (если нужно понять примерную просадку производительности при переходе на питон, то смело можно использовать 100. Ошибка будет не больше 5 %)
0
Речь идет конечно о математике. Если проект только и делает что пишет, читает (в общем ждет данных), то просадка меньше (какая разница какой кон не выполнятся во время ожидания).
0
код*
0
Есть сравнение:
MicroPython on Teensy 3.1: (96Mhz ARM) Count: 1,098,681
C++ on Teensy 3.1: (96Mhz ARM) Count: 95,835,923
Ну, как я и говорил, на вычислениях, питон примерно в 100 раз медленнее С/C++
0
Ардуино, тащемта, и есть чистый С (точнее, С++, но в плане производительности он по крайней мере не хуже). Там только некоторые библиотечные функции ардуино неторопливы из-за изобилия проверок (digitalWrite, например).
0
Какие требования у этого интерпретатора? В списке борд, насколько я вижу, практически исключительно STM32F4.
Алсо, что за редактор на втором скрине?
0
  • avatar
  • Vga
  • 18 мая 2014, 10:34
Sublime Text. Душевная вещь. К нему бы модуль для полноценной отладки ещё — и получилась бы превосходная IDE.
0
Тут недавно упоминался плагин Sublime GDB как раз для этого.
Алсо, как этот ваш sublime по сравнению с Notepad++?
0
GDB реализован только для 2го, хотя уже есть 3й, плюс с альтернативными серверами (avr-gdb, openocd, st-util) как-то не удалось подружить. Может, что-то не учёл. Нужно будет ещё раз попробовать.
По сравнению с Notepad++ — приятнее на глаз, поддерживает сразу не только расширенные функции редактирования (множественное выделение и т.д.), но и фишки из серии перехода на функцию, переход на строку содержащую текст и ещё кучу удобностей, и, самое главное — мультиплатформенный. Т.е. есть и под вынь, и под линь.
0
Зато платный… А со SlickEdit не сравнивал?
0
Платность в нем к стати не совсем и страшная. Просто редактор иногда выбросит окошко с просьбой купить. Даже не при каждом старте редактора. Например после сохранения файла и т.п. операций. Причем бывает это достаточно редко.
0
Насчет SlickEdit — тоже, чисто субъективно, приятнее глазу, как и в сравнении с Notepad++. Дефолтная цветовая схема monokai чрезвычайно удачна, как по мне. Пишешь — и глаз радуется (почему и не работаю в IAR со стремным редактором).
Опять же, можно крякнуть, и все проблемы решены.
Куча подключаемых плагинов — саблайму в плюс.
Я на работе один проект на STM8L сейчас в саблайме пишу и редактирую — а отлаживаю уже в IAR.))
0
Я года два сидел на SublimeText2, но в итоге вернулся на Emacs и немного его поднастроил:



В нём и GDB и прочие хренотени отлично работают. А уж 24-я версия, сама может плагины с сети ставить и настраиваться. Попробуй открыть несколько гигабайтный однострочный текст в обоих редакторах и ты явно увидишь кто круче :)
0
Я тут на досуге тоже заморачивался интерпретаторами. Вот, портанул интерпретатор Scheme (это такой вариант языка Lisp) на процессор stm32f103c8t6 и даже проверил в работе:


Прикольная штука, осталось вспомнить сам язык, чтобы свободно на нём писать. От питона бы тоже не отказался, но ему ресурсы нужны более серьёзные.

Репозиторий с портом для stm32f103.
0
Сколько heap'а нужно для startup'а? MicroPython стартует в 0.5K (ну, чуть больше).
0
Тоже делать было нечего — баловался с С
akb77.com/g/stm32/uc/
0
Интересно, надо попробовать. Периферия поддерживается?
0
Можно сделать (что то есть типа дрыгания пинов) кто-то мерял скорость.
0
Пиво закончилось и проект тоже :)
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.